22. 친구 수 집계하기
2024-12-24
with user_a_counts as (
SELECT
user_a_id AS user_id,
COUNT(DISTINCT user_b_id) AS friend_count
FROM edges
GROUP BY user_a_id
),
user_b_counts as (
SELECT
user_b_id AS user_id,
COUNT(DISTINCT user_a_id) AS friend_count
FROM edges
GROUP BY user_b_id
)
SELECT
u.user_id
, coalesce(a.friend_count, 0) + coalesce(b.friend_count, 0) num_friends
FROM users u
left join user_a_counts a on a.user_id = u.user_id
left join user_b_counts b on b.user_id = u.user_id
group by u.user_id
order by num_friends desc, u.user_id asc
처음에는 단순하게 edges
내부에서 UNION ALL
걸어버리면 안되나,,, 라고 해서 제출했는데 오답이어서 다시 보니...친구가 아예 없는 사용자가 있다는 생각을 아예 못했던 것 ...
users
테이블과 edges
를 조인할때도 처음에는 단순하게 OR
로 LEFT JOIN 걸어버리자 ... 해서 쿼리 작성했다가 실행시간이 말도 안되게 오래걸려서(당연함) 결국은 a와 b의 카운트를 각각 구해서 더하는 방법으로 구현했다