602. Friend Requests II: Who Has the Most Friends(LeetCode)

minllny·2024년 4월 4일


부트캠프 시작해서 체력이 딸리지만 코테를 하루에 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값이니까 서브쿼리를 한 번 더 쓸 필요는 없었네요 ㅎ
정말 서브쿼리가 하나 없어지니까 처리속도가 빨라졌습니다!!! 👏👏

profile
SQL 끄적끄적

0개의 댓글