[solvesql - day 22] lv3 친구 수 집계하기

데프·2024년 12월 26일
post-thumbnail

👉 문제 바로가기 : 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
;

답안 설명

  1. cal 임시테이블에선 유저별로 집계한 후 union all로 이어붙인다.
    • union보다 부하가 적은 union all을 사용했다.
  2. 메인쿼리에선 모든 유저를 출력할 수 있게 users테이블을 left join하고 null처리 해주었다.
profile
정보의 홍수를 기록하는 데프의 로그

0개의 댓글