본문 바로가기
SQL/SQL test

[HackerRank] The Report (INNER JOIN - BETWEEN)

by ISLA! 2024. 1. 15.

문제

다음과 같이 Students, Grades 두 테이블이 주어졌다.

문제는 다음과 같은 순으로 해결한다.

1. 세 개의 열 : 이름, 학년 및 점수
2. 학점이 8 미만인 학생들의 이름은 제외 >> NULL
3. 학점을 내림차순으로 정렬 (높은 학점이 먼저 표시됨)
4. 학점이 8에서 10 사이인 학생들이 여러 명인 경우, 이름을 알파벳 순으로 정렬
-
5. 학점이 8 미만인 학생들의 경우, 이름을 "NULL"로 표시하고 학점을 내림차순으로 정렬
6. 학점이 1에서 7 사이인 학생들이 여러 명인 경우, 점수를 오름차순으로 정렬


풀이

▶︎ 이 문제의 핵심은 두 테이블을 join 할 때 inner join + between을 사용해서 mark의 최대 최솟값과 grade를 매치시키는 것이다.

▶︎ Case When을 사용하여 Grade가 8 이상인 경우와 그렇지 않은 경우로 나누어 Name을 불러오거나, Null을 지정한다.

SELECT CASE WHEN (GRADE >= 8) THEN NAME
            ELSE "NULL" END AS NAME,
       GRADE, MARKS
FROM Students
INNER JOIN Grades on Students.Marks BETWEEN Grades.Min_Mark AND Grades.Max_Mark
ORDER BY GRADE DESC, NAME ASC, MARKS ASC

결과

728x90