https://leetcode.com/problems/friend-requests-ii-who-has-the-most-friends/
Column Nmae | Type |
requester_id | int |
accepter_id | int |
accept_date | date |
RequestAccepted 테이블:
- requester_id : 테이블의 고유 키, 요청받은 사용자의 id
- accepter_id : 테이블의 고유 키, 요청한 사용자의 id
- accept_date : 요청이 수락된 날짜
가장 많은 친구를 가진 사람과 그 친구 수를 찾는 해결책을 작성하세요.
테스트 케이스는 오직 한 사람만이 가장 많은 친구를 가지도록 생성됩니다.
결과 형식은 다음 예시와 같습니다.
친구의 수는 친구신청을 한 횟수 + 친구신청을 받은 횟수이므로 두 경우를 구해서 서로 더해주면 된다.
select
requester_id,
count(requester_id)
from RequestAccepted
group by requester_id
먼저 유저별로 친구신청을 보낸 횟수를 구해준다.
select
accepter_id,
count(accepter_id) accept
from RequestAccepted
group by accepter_id
다음으로 유저별로 친구신청을 받은 횟수를 구해준다.
(select
requester_id id,
count(requester_id) request
from RequestAccepted
group by requester_id)
union all
(select
accepter_id id,
count(accepter_id) accept
from RequestAccepted
group by accepter_id)
두 쿼리를 union all로 결합한다.
select
id,
sum(request) num
from
((select
requester_id id,
count(requester_id) request
from RequestAccepted
group by requester_id)
union all
(select
accepter_id id,
count(accepter_id) accept
from RequestAccepted
group by accepter_id)) a
group by id
해당 쿼리를 서브쿼리로 바꾼 뒤, id별로 합계를 출력한다.
select
id,
sum(request) num
from
((select
requester_id id,
count(requester_id) request
from RequestAccepted
group by requester_id)
union all
(select
accepter_id id,
count(accepter_id) accept
from RequestAccepted
group by accepter_id)) a
group by id
order by num DESC
limit 1
요청이 많은 순서대로 내림차순 정렬해서 가장 위의 행만 출력하면 완료!
'코딩일기' 카테고리의 다른 글
알고리즘 코드카타 54 - 2016년 (복습) (0) | 2024.07.12 |
---|---|
SQL 코드카타 118 - Investments in 2016 (0) | 2024.07.12 |
SQL 코드카타 116 - Restaurant Growth (0) | 2024.07.12 |
알고리즘 코드카타 53 - 명예의 전당 (1) (복습) (0) | 2024.07.11 |
SQL 코드카타 115 - Movie Rating (0) | 2024.07.11 |