[SQL#117]602. Friend Requests II: Who Has the Most Friends

Gi Woon Lee·2024년 9월 5일

SQL

목록 보기
14/33

602. Friend Requests II: Who Has the Most Friends

문제 이해

  • requester_idaccepter_id 두 칼럼 중 어느 곳에 등장하더라도 그 ID는 친구 수에 포함됩니다. 따라서, 각 칼럼에서 등장 횟수를 합산하여 각 ID의 친구 수를 계산합니다.

해결 절차

  1. 등장 횟수 계산

    • requester_idaccepter_id 각각의 칼럼에서 등장하는 ID의 횟수를 구합니다.
    • GROUP BYCOUNT()를 사용하여 각 칼럼별로 그룹화하고 ID당 등장 횟수를 구합니다.
  2. 결과 합치기 (UNION)

    • requester_idaccepter_id에서 얻은 그룹별 결과를 UNION ALL로 합칩니다.
    • UNION ALL은 두 결과를 합치면서 각 ID의 등장 횟수를 모두 포함합니다.
  3. 최종 그룹화 및 합산

    • 서브쿼리에서 GROUP BY를 다시 사용하여 ID별로 합산합니다.
    • 각 ID가 requester_id 또는 accepter_id로 등장한 횟수를 합산하여 총 친구 수를 계산합니다.
  4. 정렬 및 최댓값 찾기

    • 최종 결과를 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 BYSUM(): 각각의 ID가 두 칼럼에서 몇 번 등장하는지 구하고 합산합니다. 이는 ID별 친구 수를 계산하는 핵심 과정입니다.
  • ORDER BY DESCLIMIT 1: 정렬 후 상위 1개만 가져와서 가장 친구가 많은 ID를 찾습니다.

이 쿼리는 각 ID가 얼마나 자주 친구 요청을 했거나 수락했는지 계산하여, 친구 수가 가장 많은 ID를 찾는 절차를 따르고 있습니다.

0개의 댓글