Day 22. ์น๊ตฌ ์ ์ง๊ณํ๊ธฐ
https://solvesql.com/problems/number-of-friends/
with t1 as (
(select user_a_id as user_id
, count(*) as num_friends
from edges
group by user_a_id
order by user_a_id)
union all
(select user_b_id as user_id
, count(*) as num_friends
from edges
group by user_b_id
order by user_b_id)
), t2 as (
select u.user_id
, case when num_friends is not null then num_friends
else 0 end as num_friends
from users as u
left join t1 on u.user_id = t1.user_id
)
select user_id, sum(num_friends) as num_friends
from t2
group by user_id
order by num_friends desc, u.user_id asc
โUSER_ID ๊ธฐ์ค์ผ๋ก GROUP BY
+) WITH ์ : T1
โUNION ์ฌ์ฉํด์ ๋ ๊ฐ์ ํ
์ด๋ธ ์ ์๋๋ก ๊ฒฐํฉํ๊ธฐ
โUSER_ID A๋ก GROUP BY ํ ๊ฒ, B๋ก GROUP BY ํ ๊ฒ ํฉ์นจ
โUSER_A_ID์ ์์ด๋ USER_B_ID์ ์์ด์ ํ ๋ฒ์ ๋ค ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด์ผ ํจ
+) WITH ์ : T2
โCASE WHEN ์ฌ์ฉํด์ ์น๊ตฌ ์๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด 0 ์ฝ์
โLEFT JOIN ์ฌ์ฉํด์ ์ฃผ์ด์ง ํ
์ด๋ธ๊ณผ ๋ง๋ T1 ํ
์ด๋ธ ๊ฒฐํฉ