Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- Lv. 0
- join
- javascript
- 소프티어
- 동적계획법
- 깊이 우선 탐색
- DP
- Java
- group by
- Dynamic Programming
- Lv. 2
- 백준
- SQL 고득점 KIT
- 너비 우선 탐색
- Lv. 1
- 티스토리챌린지
- SQL
- 오블완
- softeer
- Lv. 3
- Baekjoon
- 파이썬
- level 3
- 자바스크립트
- programmers
- bfs
- Python
- LEVEL 2
- dfs
- 프로그래머스
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
[HackerRank-MSSQL] 해커랭크 Basic Join - The Report 본문
728x90
문제 링크
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(gra.grade >= 8, stu.name, null), gra.grade, stu.marks from students as stu
left join grades as gra on stu.marks >= gra.min_mark and stu.marks <= gra.max_mark
order by gra.grade desc, stu.name;
정답 코드
SELECT
CASE
WHEN G.Grade >= 8 THEN S.Name
ELSE NULL
END AS Name,
G.Grade,
S.Marks
FROM Students S
JOIN Grades G ON S.Marks BETWEEN G.Min_Mark AND G.Max_Mark
ORDER BY
G.Grade DESC,
CASE WHEN G.Grade >= 8 THEN S.Name END ASC,
CASE WHEN G.Grade < 8 THEN S.Marks END ASC;
풀이 과정
- 일단 8등급 이하 학생은 null로 보여주려고 했다.
- 근데 IF가 없고 여기서는 CASE END와 그 속에서 WHEN THEN ELSE를 써야했다.
- 조인은 잘 했는데 정렬을 틀렸다.
- 등급 순 내림차순으로 정렬하고
- 8등급 이상은 이름 + 오름차순
- 8등급 미만은 점수 + 오름차순
- 으로 정렬해야 한다.

느낀점
- 이 바닥 겸손해야 한다.
- when then else case end 봤지만 쓸줄 모른다.
728x90