문제 사이트
아래 문제는 해커랭크에서 추출해온 문제입니다. 문제의 저작권은 해커랭크에 있으며 문제를 풀어보시려면 아래 링크를 클릭해주세요 🙂
The Report | HackerRank
Write a query to generate a report containing three columns: Name, Grade and Mark.
www.hackerrank.com
👉문제 설명
- GRADE가 8이상인 학생들만 조회
- 등급 순으로 내림차순 정렬, 같은 등급일시 이름 알파벳순으로 정렬
- GRADE가 8 미만인 학생들 이름은 NULL로 추출
- 등급 순으로 내림차순 정렬, 같은 등급일시 점수 순으로 오름차순 정렬


👉문제 풀이
- Mark에 맞는 Grade 출력하기
- Grade가 8 미만인 경우 NULL로 출력하기
- 정렬 조건
👉문제 풀이 과정
1. Mark에 맞는 Grade 출력하기
SELECT S.Name, G.Grade, S.Marks
FROM STUDENTS AS S
INNER JOIN GRADES AS G
ON S.Marks BETWEEN G.Min_Mark AND G.Max_Mark
- inner join 에서도 between을 사용해서 테이블을 조인할 수 있다.
2. Grade가 8 미만인 경우 NULL로 출력하기
SELECT IF(G.Grade >= 8, S.Name, NULL), G.Grade, S.Marks
FROM STUDENTS AS S
INNER JOIN GRADES AS G
ON S.Marks BETWEEN G.Min_Mark AND G.Max_Mark
- IF를 활용해서 Grade가 8 이상인 경우에만 Name을 출력하고 아니면 NULL을 출력
3. 정렬 조건
SELECT IF(G.Grade >= 8, S.Name, NULL), G.Grade, S.Marks
FROM STUDENTS AS S
INNER JOIN GRADES AS G
ON S.Marks BETWEEN G.Min_Mark AND G.Max_Mark
ORDER BY G.Grade desc, S.Name, S.Marks
👉최종 답안
SELECT IF(G.Grade >= 8, S.Name, NULL), G.Grade, S.Marks
FROM STUDENTS AS S
INNER JOIN GRADES AS G
ON S.Marks BETWEEN G.Min_Mark AND G.Max_Mark
ORDER BY G.Grade desc, S.Name, S.Marks

👉고찰
BETWEEN이 JOIN문에서도 활용이 될 수 있다는 것을 처음 알았다!
'SQL > MySQL' 카테고리의 다른 글
| 프로그래머스 LV1. 중성화 여부 파악하기, 다양한 코드 구현 방법 (0) | 2025.04.07 |
|---|---|
| [MySQL] HackerRank - Ollivander's Inventory 문제 풀이 (0) | 2025.03.26 |
| [MySQL] HackerRank - Weather Observation Station 20 문제 풀이 (0) | 2025.03.19 |
| [MySQL] HackerRank - Top Competitors 문제 풀이 (0) | 2025.03.13 |
| [MySQL] HackerRank - New Companies 문제 풀이 (0) | 2025.03.12 |