602. Friend Requests II: Who Has the Most Friends
requester_id와 accepter_id 두 칼럼 중 어느 곳에 등장하더라도 그 ID는 친구 수에 포함됩니다. 따라서, 각 칼럼에서 등장 횟수를 합산하여 각 ID의 친구 수를 계산합니다.
등장 횟수 계산
requester_id와 accepter_id 각각의 칼럼에서 등장하는 ID의 횟수를 구합니다.GROUP BY와 COUNT()를 사용하여 각 칼럼별로 그룹화하고 ID당 등장 횟수를 구합니다.결과 합치기 (UNION)
requester_id와 accepter_id에서 얻은 그룹별 결과를 UNION ALL로 합칩니다.UNION ALL은 두 결과를 합치면서 각 ID의 등장 횟수를 모두 포함합니다.최종 그룹화 및 합산
GROUP BY를 다시 사용하여 ID별로 합산합니다.requester_id 또는 accepter_id로 등장한 횟수를 합산하여 총 친구 수를 계산합니다.정렬 및 최댓값 찾기
ORDER BY로 내림차순 정렬하고, LIMIT 1을 사용하여 친구 수가 가장 많은 ID를 가져옵니다.SELECT
requester_id AS id,
SUM(cnt) AS num
FROM (
SELECT requester_id, COUNT(*) AS cnt
FROM RequestAccepted
GROUP BY requester_id
UNION ALL
SELECT accepter_id, COUNT(*) AS cnt
FROM RequestAccepted
GROUP BY accepter_id
) sub
GROUP BY requester_id
ORDER BY num DESC
LIMIT 1;
UNION ALL: 각 쿼리의 결과를 모두 포함하여 중복을 유지하면서 합칩니다. UNION은 중복을 제거하지만, 친구 수 계산 시 중복 제거는 원치 않으므로 UNION ALL을 사용합니다.GROUP BY와 SUM(): 각각의 ID가 두 칼럼에서 몇 번 등장하는지 구하고 합산합니다. 이는 ID별 친구 수를 계산하는 핵심 과정입니다.ORDER BY DESC와 LIMIT 1: 정렬 후 상위 1개만 가져와서 가장 친구가 많은 ID를 찾습니다.이 쿼리는 각 ID가 얼마나 자주 친구 요청을 했거나 수락했는지 계산하여, 친구 수가 가장 많은 ID를 찾는 절차를 따르고 있습니다.