본문 바로가기
SQL

[SQL 코테 풀이] HackerRank - The Report (DIFFICULTY : Medium, SKILL : Intermediate, MySQL)

by _땅콩 2024. 3. 22.

문장으로 된 문제를 SQL 코드로 구현하는 것도 문제이지만, 제한시간 안에 푸는 것도 문제이다.

3일이라는 짧은 시간 안에 익숙해져야 하기 때문에, 많은 문제를 푸는 것이 중요하다.

 

중급, 고급 난이도의 문제는 정리를 하도록 하고, 초급 난이도의 문제는 시간을 짧게 설정해두고 푸는 연습도 동시에 해보려고 한다.


 

문제

DIFFICULTY : Medium, SKILL : Intermediate, MySQL


You are given two tables: Students and Grades. Students contains three columns ID, Name and Marks.



Grades contains the following data:

Ketty gives Eve a task to generate a report containing three columns: Name, Grade and Mark. Ketty doesn't want the NAMES of those students who received a grade lower than 8. The report must be in descending order by grade -- i.e. higher grades are entered first. If there is more than one student with the same grade (8-10) assigned to them, order those particular students by their name alphabetically. Finally, if the grade is lower than 8, use "NULL" as their name and list them by their grades in descending order. If there is more than one student with the same grade (1-7) assigned to them, order those particular students by their marks in ascending order.

Write a query to help Eve.

문제해석
Ketty는 Eve에게 이름, 등급, 마크 세 개의 열을 포함하는 보고서를 생성하는 과제를 주었습니다.
Ketty는 8보다 낮은 등급을 받은 학생들의 이름을 원하지 않습니다.
보고서는 학년별로 내림차순이어야 합니다. 즉, 더 높은 등급을 먼저 입력합니다.
같은 등급(8-10)을 받은 학생이 두 명 이상인 경우, 해당 학생의 이름을 알파벳 순으로 정렬합니다.
마지막으로, 등급이 8보다 낮으면, "NULL"을 이름으로 사용하고 내림차순으로 성적별로 나열합니다.
같은 등급(1-7)을 받은 학생이 두 명 이상인 경우, 해당 학생의 점수를 오름차순으로 정렬합니다.

1) NAME
    - 등급이 8보다 낮으면, NULL 처리
2) GRADE
    - STUDENTS 테이블(S)과 GRADES 테이블(G) JOIN
    - 기준(ON) : S의 MARKS가 G의 MIN, MAX 사이에 오는 값 JOIN
3) 정렬
    - GRADE 내림차순
    - NAME 오름차순
    - MARKS 오름차순

 

 

INPUT 테이블

 

 

OUTPUT 결과 샘플

 

 


SQL CODE

SELECT CASE WHEN T2.GRADE >= 8 THEN T1.NAME ELSE NULL END AS NAME
     , T2.GRADE
     , T1.MARKS
  FROM STUDENTS T1
  JOIN GRADES T2
    ON (T1.MARKS >= T2.MIN_MARK AND T1.MARKS <= T2.MAX_MARK)
 ORDER BY T2.GRADE DESC, T1.NAME ASC, T1.MARKS ASC
;

 

 

 

SQL 결과

Britney 10 95
Heraldo 10 94
Julia 10 96
Kristeen 10 100
Stuart 10 99
Amina 9 89
Christene 9 88
Salma 9 81
Samantha 9 87
Scarlet 9 80
Vivek 9 84
Aamina 8 77
Belvet 8 78
Paige 8 74
Priya 8 76
Priyanka 8 77
NULL 7 64
NULL 7 66
NULL 6 55
NULL 4 34
NULL 3 24

 

 

 


느낀점/개선점

추가 조사 STUDENTS 테이블의 성적으로
GRADES 테이블의 기준으로 등급을 매기기 위해서는
JOIN에서 ON 조건으로 활용해야 한다.
느낀점/ 개선점 푸는데 걸린 시간 : 22분

3문제를 푸는데 45분 정도 준다고 하니, 분발해야한다.
시간이 제한되어 있으니 갑자기 백지가 된다.

첫번째로는 문장으로 주어지는 내용을 코드로 구현하는데 익숙해져야 할 것 같고,
두번째로는 시간을 정해놓고 그 안에 푸는데 익숙해져야 할 것 같다.