반응형
2020/01/26 - [SQL] - [SQL] HackerRank로 시작하는 SQL - 6
문제주소 : https://www.hackerrank.com/challenges/challenges/problem
문제 : hacker_id, name, 각 학생의 대회 점수 총합을 출력해라. 단, 총점을 기준으로 내림차순으로 정렬하고, 만약 동점이 있을시 hacker_id를 기준으로 정렬해라. 만약, 동점자가 있을때 점수가 최고점이 아닌경우는 결과에서 제외하라.
이번 문제를 풀면서 집계 함수는 HAVING 절에서 풀어야된다는걸 알았다.
HAVING절은 WHERE 절과 GROUP BY 가 끝난 Row들에 대해서 적용된다고 한다.
그리고 진짜 이문제 덕분에 GROUP BY와 COUNT에 대해 제대로 알게됬음.
SELECT H.HACKER_ID, H.NAME, COUNT(C.CHALLENGE_ID) as IDCNT FROM CHALLENGES C, HACKERS H
WHERE C.HACKER_ID = H.HACKER_ID GROUP BY H.HACKER_ID, H.NAME, C.HACKER_ID
HAVING IDCNT = (SELECT COUNT(CHALLENGE_ID) AS CNT FROM CHALLENGES GROUP BY HACKER_ID ORDER BY CNT DESC LIMIT 1) OR IDCNT IN (SELECT sub.C_CNT FROM (SELECT COUNT(CHALLENGE_ID) AS C_CNT FROM CHALLENGES GROUP BY HACKER_ID) sub
GROUP BY sub.C_CNT
HAVING COUNT(sub.C_CNT) = 1)
ORDER BY IDCNT DESC, H.HACKER_ID ASC
반응형
'SQL' 카테고리의 다른 글
[SQL] HackerRank로 시작하는 SQL - 8 (0) | 2020.01.28 |
---|---|
[SQL] HackerRank로 시작하는 SQL - 6 (0) | 2020.01.26 |
[SQL] HackerRank로 시작하는 SQL - 5 (0) | 2020.01.24 |
[SQL] PRG's SQL DOCS (0) | 2020.01.24 |
[SQL] HackerRank로 시작하는 SQL - 4 (0) | 2020.01.24 |
댓글