안녕하세요!
[TABLE]
- Hackers
- Challenges
[문제]
각 hacker_id 와 name, 그리고 참여한 challenge의 개수를 알아내야 한다.
challenge 의 개수가 동일한 hacker의 경우 이들의 challenge 개수가
challenge 개수의 최대값보다 작으면 이들은 제외한다.
정렬은 challenge 개수가 높은 순서로, challenge 개수가 동일할 시 hacker_id 가 낮은 순서로 한다.
[제출 쿼리]
SELECT A.hacker_id, A.name, COUNT(B.challenge_id) cnt
FROM hackers A
JOIN challenges B
ON A.hacker_id = B.hacker_id
GROUP BY 1, 2
HAVING cnt IN ( SELECT cnt
FROM ( SELECT COUNT( challenge_id ) cnt
FROM challenges
GROUP BY hacker_id ) c
GROUP BY cnt
HAVING COUNT (cnt) = 1 )
OR cnt = ( SELECT MAX (cnt)
FROM ( SELECT COUNT( challenge_id ) cnt
FROM challenges
GROUP BY hacker_id ) d )
ORDER BY cnt DESC, hacker_id
[WITH 문 사용]
WITH tmp AS (
SELECT hackers.hacker_id
, hackers.name
, count(*) as cnt
FROM challenges
INNER JOIN hackers ON challenges.hacker_id = hackers.hacker_id
GROUP BY hackers.hacker_id, hackers.name)
SELECT hacker_id
, name
, cnt
FROM tmp
WHERE cnt = (SELECT max(cnt) FROM tmp)
OR cnt in (SELECT cnt FROM tmp GROUP BY cnt HAVING count(*) = 1)
ORDER BY cnt desc, hacker_id
출처 : https://www.hackerrank.com/challenges/challenges/problem
'배우기 > SQL' 카테고리의 다른 글
Leetcode - 180.Consecutive Numbers(조인)_MySQL (0) | 2022.04.18 |
---|---|
HackerRank - The Report(CASE WHEN/조인, BETWEEN)_MySQL (0) | 2022.04.18 |
HackerRank - Top Competitors (조인)_MySQL (0) | 2022.04.11 |
LeetCode - 184.Department Highest Salary (조인, 서브쿼리)_MySQL (1) | 2022.04.08 |
HackerRank - Top Earners (서브쿼리 / GROUP BY 외)_MySQL (0) | 2022.04.08 |
댓글