Challenges
https://www.hackerrank.com/challenges/challenges/problem?isFullScreen=true
Challenges | HackerRank
Print the total number of challenges created by hackers.
www.hackerrank.com


- challenge_id 갯수가
1) 최댓값이 중복일 경우 : 유지
2) 그 외 중복일 경우 : 제거
내가 쓴 답:
WITH A AS(
SELECT
h.hacker_id,
h.name,
COUNT(c.challenge_id) AS cnt
FROM
Hackers h JOIN Challenges c ON h.hacker_id = c.hacker_id
GROUP BY 1,2),
B AS (
SELECT
hacker_id, name, cnt,
COUNT(*) OVER(PARTITION BY cnt) AS freq,
RANK() OVER(ORDER BY cnt DESC) AS rum
FROM A)
SELECT hacker_id, name, cnt
FROM B
WHERE rum = 1 OR freq = 1
ORDER BY cnt DESC, hacker_id;
- CTE1 : challenge_id 개수 + 테이블 조인
- CTE2 : challenge_id 개수를 카운트 → 빈도 / challenge_id 개수 많은순으로 순위 매김
- 최종 : wherer 조건에서 빈도가 1 or 순위가 1인 놈만 남김
다른 사람이 쓴 답:
WITH cte AS (
SELECT
h.hacker_id AS hck,
h.name AS nam,
COUNT(challenge_id) AS cnt
FROM
hackers h
INNER JOIN challenges c ON c.hacker_id = h.hacker_id
GROUP BY
h.hacker_id, h.name),
cte2 AS (SELECT
cnt
FROM
cte
WHERE
cnt < (SELECT MAX(cnt) FROM cte)
GROUP BY
cnt
HAVING
COUNT(cnt) > 1)
SELECT
*
FROM
cte
WHERE
cnt NOT IN (SELECT cnt FROM cte2)
ORDER BY
cnt DESC,hck;
- CTE1 : 나랑 동일
- CTE2 : where 조건에서 challenge_id 개수 최댓값 제외한 cnt / 같은 cnt끼리 그룹핑 / 그룹핑 중 빈도 2 이상만 남김 → 제거 리스트
- 최종 : where 조건에서 CTE2(제거 리스트) 아닌 것들만 출력
ORDER BY로 정리 안 하고 또 계속 정답 처리 안 되길래 지피티 ..^^ 내일 테스트 어케 하려고₩~~~
'SQL > 문제' 카테고리의 다른 글
| SQL | OCCUPATIONS (결과물 수직으로 출력) (0) | 2025.08.22 |
|---|---|
| SQL | QCC 6회차 (0) | 2025.03.14 |
| SQL | QCC 5회차 (0) | 2025.02.28 |
| SQL | QCC 4회차 (0) | 2025.01.21 |
| SQL | Binary Tree Nodes, New Companies (0) | 2025.01.17 |