
👉 문제 바로가기 : solvesql - Advent of SQL 2024 DAY 22
저작권 문제로 링크만 첨부한다.
union과 join를 적절히 사용해야 조인수를 최소화 할 수 있다.
WITH cal AS (
SELECT user_a_id "user_id", count(user_b_id) cnt
FROM edges
GROUP by user_a_id
UNION ALL
SELECT user_b_id, count(user_a_id) cnt
FROM edges
GROUP by user_b_id
)
SELECT
user_id
, ifnull(sum(cnt), 0) "num_friends"
FROM
users
LEFT JOIN cal USING(user_id)
GROUP BY
user_id
ORDER BY
2 desc, 1
;
union all로 이어붙인다.left join하고 null처리 해주었다.