SELECT T.HACKER_ID
     , T.NAME
  FROM (SELECT A.HACKER_ID
             , D.NAME
             , (CASE WHEN A.SCORE = C.SCORE THEN 'PASS' ELSE 'FAIL' END) AS RESULT
          FROM SUBMISSIONS A, CHALLENGES B, DIFFICULTY C, HACKERS D
         WHERE A.CHALLENGE_ID = B.CHALLENGE_ID
           AND A.HACKER_ID = D.HACKER_ID
           AND B.DIFFICULTY_LEVEL = C.DIFFICULTY_LEVEL
      ORDER BY A.HACKER_ID) T
 WHERE T.RESULT = 'PASS'
 GROUP BY T.HACKER_ID, T.NAME
HAVING COUNT(T.RESULT) > 1
 ORDER BY COUNT(T.RESULT) DESC, T.HACKER_ID

RESULT 값의 집계함수를 조건으로 사용할 것이므로

WHERE절이 아닌 HAVING절에 쓴다.

HAVING절은 GROUP BY와 ORDER BY 사이에 위치한다.

해커랭크 Top Competitors SQL

'SQL > 해커랭크' 카테고리의 다른 글

[SQL] 해커랭크 15 Days of Learning SQL  (0) 2022.12.03
[SQL] 해커랭크 SQL Project Planning  (0) 2022.12.03
[SQL] 해커랭크 The Report  (0) 2022.12.03
[SQL] 해커랭크 Occupations  (0) 2022.12.03
[SQL] 해커랭크 The PADS  (0) 2022.12.02

+ Recent posts