https://www.hackerrank.com/challenges/the-report/problem?isFullScreen=true
8등급 이하를 받은 학생들의 이름을 'NULL'으로 변경해주고, 등급별로 내림차순, 동일한 학년(8-10)이 할당된 학생이 두 명 이상인 경우 해당 학생의 이름을 알파벳 순으로 정렬해주고 마지막으로 해당 학생들의 점수를 오름차순으로 정렬합니다.
저는 케이스문으로 작성해서 풀었는데요
글을 번역할때 정렬기준의 말을 이해를 못해 조금 헷갈렸네요...
일단
CASE문으로 8등급 이하를 받은 학생의 이름을 null값으로 불러옵니다.
SELECT CASE WHEN marks > 70 THEN name
WHEN marks <=69 THEN 'NULL' END AS name
점수 별 등급을 만들어줍니다.
CASE WHEN marks <=9 THEN 1
WHEN 10 <= marks AND marks <=19 THEN 2
WHEN 20 <= marks AND marks <=29 THEN 3
WHEN 30 <= marks AND marks <=39 THEN 4
WHEN 40 <= marks AND marks <=49 THEN 5
WHEN 50 <= marks AND marks <=59 THEN 6
WHEN 60 <= marks AND marks <=69 THEN 7
WHEN 70 <= marks AND marks <=79 THEN 8
WHEN 80 <= marks AND marks <=89 THEN 9
WHEN 90 <= marks AND marks <=100 THEN 10
END AS GRADE
이제 점수를 불러오고, 데이터를 정렬해주면 정답입니다.
SELECT CASE WHEN marks > 70 THEN name
WHEN marks <=69 THEN 'NULL' END AS name, CASE WHEN marks <=9 THEN 1
WHEN 10 <= marks AND marks <=19 THEN 2
WHEN 20 <= marks AND marks <=29 THEN 3
WHEN 30 <= marks AND marks <=39 THEN 4
WHEN 40 <= marks AND marks <=49 THEN 5
WHEN 50 <= marks AND marks <=59 THEN 6
WHEN 60 <= marks AND marks <=69 THEN 7
WHEN 70 <= marks AND marks <=79 THEN 8
WHEN 80 <= marks AND marks <=89 THEN 9
WHEN 90 <= marks AND marks <=100 THEN 10
END AS GRADE,marks
FROM students
ORDER BY grade DESC,name, marks
join을 통해 문제를 푸는 문제를 풀 수도 있는데요!
SELECT IF (B.GRADE <= 7, NULL, A.NAME), B.GRADE, A.MARKS
FROM STUDENTS A
JOIN GRADES B
ON A.MARKS BETWEEN MIN_MARK AND MAX_MARK
ORDER BY B.GRADE DESC, A.NAME, A.MARKS