문제
다음과 같이 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
'SQL > SQL test' 카테고리의 다른 글
[HackerRank] Contest Leaderboard (0) | 2024.01.16 |
---|---|
[HackerRank] Challenges (0) | 2024.01.16 |
[HackerRank] Weather Observation Station 5(UNION) (1) | 2024.01.15 |
[HackerRank] Weather Observation Station 20(중앙값) (0) | 2024.01.15 |
[BigQuery] 현업 문제 해결 쿼리 작성(4) : 성과 확인(A/B test) (1) | 2024.01.14 |