본문 바로가기
SQL/MySQL

[MySQL] HackerRank - The Report 문제 풀이

by 취준생 져니 2025. 3. 24.

문제 사이트

아래 문제는 해커랭크에서 추출해온 문제입니다. 문제의 저작권은 해커랭크에 있으며 문제를 풀어보시려면 아래 링크를 클릭해주세요 🙂

 

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로 추출
  • 등급 순으로 내림차순 정렬, 같은 등급일시 점수 순으로 오름차순 정렬

 

 

 

👉문제 풀이

  1. Mark에 맞는 Grade 출력하기
  2. Grade가 8 미만인 경우 NULL로 출력하기
  3. 정렬 조건

 

 

👉문제 풀이 과정

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문에서도 활용이 될 수 있다는 것을 처음 알았다!