문제 풀이 링크: https://www.hackerrank.com/challenges/the-report/problem?isFullScreen=true
The Report | HackerRank
Write a query to generate a report containing three columns: Name, Grade and Mark.
www.hackerrank.com
👿 The Report 문제 요약
- 학생의 점수(Marks)에 따라 학점(Grade) 계산
- 출력 컬럼: Name, Grade, Marks
- 조건
- Grade가 8 이상인 경우
- 이름(Name)은 그대로 출력
- 정렬
- Grade 기준 내림차순
- 같은 Grade 내에서는 Name 기준 오름차순
- Grade가 8 미만인 경우
- 이름(Name)은 "NULL"로 대체
- 정렬
- Grade 기준 내림차순
- 같은 Grade 내에서는 Marks 기준 오름차순
- Grade가 8 이상인 경우
👿 풀이 해설
🔹 ON ... BETWEEN
- Marks가 Grades 테이블의 Min_Mark ~ Max_Mark 범위에 해당할 때만 매칭
- 즉, 점수 범위에 따라 학점(Grade)을 부여하는 조건
- 실질적으로 학생에게 Grade를 연결해주는 핵심 조건
🔹 CASE WHEN을 ORDER BY에서 사용한 이유
- 정렬 조건이 Grade 값에 따라 달라지기 때문
- Grade ≥ 8: 이름 오름차순 정렬
- Grade < 8: 점수 오름차순 정렬
- 그래서 동적 정렬 조건을 표현하기 위해 CASE WHEN을 활용
- ORDER BY 안에서 조건 분기 정렬이 필요한 상황에 유용한 패턴
SELECT
CASE WHEN g.Grade < 8 THEN 'NULL'
ELSE s.Name
END AS Name,
g.Grade,
s.Marks
FROM Students s
JOIN Grades g
ON s.Marks BETWEEN g.Min_Mark AND g.Max_Mark
ORDER BY g.Grade DESC,
CASE WHEN g.Grade >= 8 THEN s.Name
ELSE NULL
END,
CASE WHEN g.Grade < 8 THEN s.Marks
ELSE NULL
END
'SQL' 카테고리의 다른 글
Weather Observation Station (0) | 2025.05.06 |
---|---|
Top Competitors (0) | 2025.05.06 |
Contest Leaderboard (0) | 2025.05.05 |
Binary Tree Nodes (0) | 2025.05.05 |
Weather Observation Station 19 (0) | 2025.05.05 |