[오늘의 문제] 보고서

shlim55·2026년 1월 4일

코딩테스트

목록 보기
202/223

출처: 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. 같은 등급 내 이름 오름차순
profile
A Normal Programmer

0개의 댓글