mySQL

[HackerRank]-The Report

bellhundred 2023. 3. 1. 21:14

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

SELECT IF(B.GRADE>=8, A.NAME, 'NULL'), B.GRADE, A.MARKS
FROM Students A join Grades B
ON A.MARKS BETWEEN B.MIN_MARK AND B.MAX_MARK
ORDER BY B.GRADE DESC, A.NAME, A.MARKS

문제 조건을 하나씩 살펴보면

 

1. 출력은 이름, 등급, 점수로 하되 등급이 8등급 미만인 사람은 이름 대신 'NULL'로 표시한다.

2. 등급은 Grades의 Min_mark와 Max_mark 사이의 값으로 선택한다.

3. 정렬은 Grade의 내림차순, 이름의 오름차순, 점수의 오름차순 으로 표시한다.

 

갑자기 레벨이 넘 오른 거 같긴 하지만 하나씩 분리해서 생각해보면

SELECT IF(B.GRADE>=8, A.NAME, 'NULL')

등급이 8등급 이상인지 이하인지에 따라 표기를 다르게 하는 방법은 IF를 통해서 사용할 수 있다.

IF(조건, 조건이 참일 경우 표시할 것, 조건이 거짓일 경우 표시할 것)

ON A.MARKS BETWEEN B.MIN_MARK AND B.MAX_MARK

점수가 Min_mark와 Max_mark 사이인 경우 해당 등급(B.Grade)을 표시할 것

 

이 두 부분이 조금 힘든 부분 아니었나 싶다.