
부트캠프 시작해서 체력이 딸리지만 코테를 하루에 1문제라도 풀기 위해 노력 중입니다..!
제 답 쿼리입니다.
WITH T1 AS(
SELECT requester_id id
FROM RequestAccepted
UNION ALL
SELECT accepter_id id
FROM RequestAccepted
)
SELECT id
, num
FROM (
SELECT id
, COUNT(*) num
FROM T1
GROUP BY id
) AS T2
ORDER BY num DESC
LIMIT 1
제가 큰 쿼리들을 보면.. 뭔가 쿼리들이 다 긴 것 같아요..🥲
서브쿼리는 벗어날 수 없는건가..!
저는 어떤 로직으로 쿼리를 짤까.. 계속 고민하다가 requester_id와 accepter_id 두 열을 합쳐서 빈도수가 가장 많은 id가 친구가 가장 많은 사람이겠다! 싶어서 냅다 UNION ALL을 해줬습니다 ㅎㅎ
그런데 어딘가에서 UNION은 처리속도가 느리다?고 했던 것 같습니다.
그래서 다른 사람의 답도 찾아보았어요.
with base as(
select requester_id id from RequestAccepted
union all
select accepter_id id from RequestAccepted)
select id, count(*) num
from base
group by 1
order by 2 desc
limit 1
오! 저랑 로직은 같네요. 제가 쓸데없이 쿼리를 길게 짰네요.
어짜피 원하는 답이 ID와 num값이니까 서브쿼리를 한 번 더 쓸 필요는 없었네요 ㅎ
정말 서브쿼리가 하나 없어지니까 처리속도가 빨라졌습니다!!! 👏👏