[해커랭크]Challenges

김준석·2024년 2월 4일

코딩테스트 - SQL

목록 보기
55/96

문제

https://www.hackerrank.com/challenges/challenges/problem?isFullScreen=true
포인트!
각 학생이 만든 도전 횟수 출력!
여기서 횟수 max값을 제외하고는 도전횟수가 중복되면 정렬 기준으로 하나만 나오도록 해야 됨.

코드

WITH CTE AS(
    SELECT
        hac.hacker_id,
        ANY_VALUE(hac.name) AS hacker_name,
        COUNT(*) cnt
    FROM
        Hackers hac
        INNER JOIN Challenges cal
            ON hac.hacker_id=cal.hacker_id
    GROUP BY
        hac.hacker_id
    ORDER BY
        cnt DESC,
        hac.hacker_id
)
SELECT *
FROM 
    CTE
WHERE 1=1
    AND cnt IN (SELECT cnt
                FROM CTE
                GROUP BY cnt
                HAVING COUNT(cnt)=1)
    OR cnt = (SELECT MAX(cnt)
              FROM CTE)

후기

본 쿼리문에서 cnt를 그룹화 후 중복이 제거 되도록 함.
추가로 MAX값이 출력되도록함.

0개의 댓글