출처: https://www.hackerrank.com/challenges/the-report/problem?isFullScreen=true
두 개의 테이블, Students 와 Grades가 주어집니다 . Students 테이블에는 ID , Name , Marks 세 개의 열이 있습니다 .
성적에는 다음과 같은 데이터가 포함되어 있습니다.
케티는 이브에게 이름 , 성적 , 점수 세 개의 열로 구성된 보고서를 작성하라는 임무를 줍니다 . 케티는 8점 미만의 성적을 받은 학생들의 이름은 보고서에 포함시키지 않아야 합니다 . 보고서는 성적이 높을수록 내림차순으로 정렬되어야 합니다. 즉, 높은 성적부터 먼저 표시되어야 합니다. 만약 같은 성적(8~10점)을 받은 학생이 여러 명인 경우, 해당 학생들은 이름의 알파벳순으로 정렬해야 합니다. 또한, 8점 미만의 성적을 받은 학생은 이름란에 "NULL"을 입력하고 성적을 내림차순으로 정렬하여 표시해야 합니다. 만약 같은 성적(1~7점)을 받은 학생이 여러 명인 경우, 해당 학생들은 점수를 오름차순으로 정렬해야 합니다.
이브를 돕기 위한 쿼리를 작성하세요.
샘플 입력
샘플 출력
Maria 10 99
Jane 9 81
Julia 9 88
Scarlet 8 78
NULL 7 63
NULL 7 68
메모
점수가 8점 미만이면 이름으로 "NULL"을 출력합니다.
설명
학생들에게 부여된 성적을 나타낸 다음 표를 참고하십시오.
따라서 다음 학생들은 8점 , 9점 또는 10 점을 받았습니다.
마리아 (10학년)
제인 (9학년)
줄리아 (9학년)
스칼렛 (8학년)
내가 한 풀이
SELECT S.Name,
CASE
WHEN G.Grade >= 8 AND G.Grade THEN S.Name
ELSE NULL
END AS S.Name
G.Grade,
S.Marks
FROM `Students` AS S
INNER JOIN `Grades` AS G
ON S.ID = G.Grade
ORDER BY G.Grade DESC, S.Name
트러블 슈팅
일단 ENS AS 별칭을 Name로 고쳐야 에러가 안뜬다.
그리고 점수 범위로 JOIN 시켜야 한다. 이건 완전 생소하다.
ON S.Marks BETWEEN G.Min_Mark AND G.Max_Mark -- 2. 점수 범위로 JOIN
수정된 코드문
SELECT
CASE
WHEN G.Grade >= 8 THEN S.Name
ELSE NULL
END AS Name, -- 1. 별칭 수정 및 컴마 추가
G.Grade,
S.Marks
FROM Students AS S
JOIN Grades AS G
ON S.Marks BETWEEN G.Min_Mark AND G.Max_Mark -- 2. 점수 범위로 JOIN
ORDER BY
G.Grade DESC, -- 3. 등급 내림차순
S.Name ASC; -- 4. 같은 등급 내 이름 오름차순