< Problem >
학생의 ID와 이름, 만든 문제 수 구하기
조건 1. 두 명 이상의 학생이 동일한 수의 문제를 냈고, 그 수가 최대 문제 개수와 같다면, 해당 학생들의 ID를 기준으로 내림차순 정렬한다.
조건 2. 두 명 이상의 학생이 동일한 수의 문제를 냈고, 그 수가 최대 문제 개수보다 적다면, 해당 학생들은 결과에서 제외한다.
링크: https://www.hackerrank.com/challenges/challenges/problem
< Code >
WITH cnt AS (SELECT hacker_id, COUNT(challenge_id) AS num_c
FROM challenges
GROUP BY hacker_id)
SELECT DISTINCT h.hacker_id, h.name, c.num_c
FROM hackers h JOIN cnt c ON h.hacker_id = c.hacker_id
WHERE c.num_c = (SELECT MAX(num_c) FROM cnt)
OR c.num_c IN (SELECT num_c
FROM cnt
GROUP BY num_c
HAVING COUNT(*)=1)
ORDER BY c.num_c DESC, h.hacker_id
< Lesson & Learned >
WITH: 가상 테이블을 만드는 구문. 생성된 가상 테이블은 해당 쿼리문 내에서 여러 번 참조가 가능하다.
SELECT: 키워드와 함께 검색하고 싶은 속성의 이름을 나열
COUNT( ): 속성 값의 개수를 검색하기 위한 집계함수. NULL 속성 값은 제외하고 계산됨.
FROM: 키워드와 함께 검색하고 싶은 속성이 있는 데이블의 이름을 나열
GROUP BY: 특정 속성의 값이 같은 투플을 모아 그룹을 만들고, 그룹별로 검색. HAVING 키워드를 이용해 그룹에 대한 조건을 작성함.
DISTINCT: 결과 테이블이 튜플의 중복을 허용하지 않도록 지정
JOIN ON: 추가예정
WHERE: 키워드와 함께 비교 연산자(=, <, >=, <>)와 논리 연산자(AND, OR, NOT)를 이용한 검색 조건 제시
MAX( ): 속성 값의 최대값을 검색하기 위한 집계함수
IN 조건: 조건과 일치하는 것이 있으면 검색조건이 참. WHERE 절에서 사용됨.
ORDER BY: 결과 테이블 내용을 원하는 순서로 출력. 오름차순(기본): ASC, 내림차순: DESC
'SQL > [HackerRank]' 카테고리의 다른 글
[HackerRank/MySQL] SQL Project Planning (0) | 2023.04.14 |
---|---|
[HackerRank/MySQL] Contest Leaderboard (0) | 2023.04.14 |
[HackerRank/MySQL] Ollivander's Inventory (0) | 2023.04.11 |
[HackerRank/MySQL] Top Competitors (0) | 2023.03.30 |
[HackerRank/MySQL] The Report (0) | 2023.03.30 |