728x90
1. hacker_id, name, 각 학생별 Challenges에 문제를 만든 개수를 출력
2. 각 학생별 Challenges에 문제를 만든 개수를 기준으로 내림차순 정렬
3. 위의 조건 중 같은 개수가 있다면 hacker_id로 정렬
4. 최대값은 같은 값이 중복되도 출력
5. 각 학생별 Challenges에 문제를 만든 개수의 최대값보다 작은 개수 중 같은 값이 있는 경우
출력에서 해당 값 모두 제외
1. hacker_id, name, 각 학생별 Challenges에 문제를 만든 개수를 출력
2. 각 학생별 Challenges에 문제를 만든 개수를 기준으로 내림차순 정렬
3. 위의 조건 중 같은 개수가 있다면 hacker_id로 정렬
SELECT C.hacker_id, H.name, count(C.hacker_id) as challenges_created
FROM Challenges C
LEFT JOIN Hackers H ON C.hacker_id = H.hacker_id
GROUP BY C.hacker_id, H.name
ORDER BY challenges_created DESC, C.hacker_id
4. 최대값은 같은 값이 중복되도 출력
SELECT C.hacker_id, H.name, count(C.hacker_id) as challenges_created
FROM Challenges C
LEFT JOIN Hackers H ON C.hacker_id = H.hacker_id
GROUP BY C.hacker_id, H.name
HAVING challenges_created = (SELECT max(sub2.challenges_max)
FROM (
SELECT count(hacker_id) as challenges_max FROM Challenges GROUP BY hacker_id
) sub2)
ORDER BY challenges_created DESC, C.hacker_id
5. 각 학생별 Challenges에 문제를 만든 개수의 최대값보다 작은 개수 중 같은 값이 있는 경우 출력에서 해당 값 모두 제외
SELECT C.hacker_id, H.name, count(C.hacker_id) as challenges_created
FROM Challenges C
LEFT JOIN Hackers H ON C.hacker_id = H.hacker_id
GROUP BY C.hacker_id, H.name
HAVING challenges_created = (SELECT max(sub1.challenges_max)
FROM (
SELECT count(hacker_id) as challenges_max FROM Challenges GROUP BY hacker_id
) sub1)
OR challenges_created IN (SELECT sub2.challenges_created
FROM (
SELECT count(*) as challenges_created FROM Challenges
GROUP BY hacker_id
) sub2
GROUP BY sub1.challenges_created
HAVING count(*) = 1)
ORDER BY challenges_created DESC, C.hacker_id
with을 활용하여 풀어보자...
WITH COUNTER AS (SELECT H.hacker_id, H.name, count(*) as challenges_created FROM Challenges C JOIN Hackers H ON C.hacker_id = H.hacker_id GROUP BY H.hacker_id, H.name) select counter.hacker_id, counter.name, counter.challenges_created from counter where counter.challenges_created = (select max(counter.challenges_created) from counter) or counter.challenges_created in (select counter.challenges_created from counter group by counter.challenges_created having count(*) = 1) order by counter.challenges_created desc, counter.hacker_id
'SQL 공부' 카테고리의 다른 글
| LeetCode로 공부하기180. Consecutive Numbers (0) | 2024.02.01 |
|---|---|
| HackerRank로 SQL 공부하기 - The Report (1) | 2023.12.29 |
| 데이터를 받고 파악하는 법, 시간 데이터 파악 (0) | 2023.12.26 |
| LeetCode 로 공부하기 184. Department Highest Salary (1) | 2023.12.26 |
| LeetCode 로 공부하기 196. Delete Duplicate Emails (0) | 2023.12.26 |