SQL

The Report

sawo11 2025. 5. 5. 22:11

문제 풀이 링크: 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


👿 The Report 문제 요약 

  • 학생의 점수(Marks)에 따라 학점(Grade) 계산
  • 출력 컬럼: Name, Grade, Marks
  • 조건
    • Grade가 8 이상인 경우
      • 이름(Name)은 그대로 출력
      • 정렬
        • Grade 기준 내림차순
        • 같은 Grade 내에서는 Name 기준 오름차순
    • Grade가 8 미만인 경우
      • 이름(Name)은 "NULL"로 대체
      • 정렬
        • Grade 기준 내림차순
        • 같은 Grade 내에서는 Marks 기준 오름차순

👿 풀이 해설

🔹 ON ... BETWEEN

  • Marks가 Grades 테이블의 Min_Mark ~ Max_Mark 범위에 해당할 때만 매칭
  • 즉, 점수 범위에 따라 학점(Grade)을 부여하는 조건
  • 실질적으로 학생에게 Grade를 연결해주는 핵심 조건

🔹 CASE WHEN을 ORDER BY에서 사용한 이유

  • 정렬 조건이 Grade 값에 따라 달라지기 때문
    • Grade ≥ 8: 이름 오름차순 정렬
    • Grade < 8: 점수 오름차순 정렬
  • 그래서 동적 정렬 조건을 표현하기 위해 CASE WHEN을 활용
  • ORDER BY 안에서 조건 분기 정렬이 필요한 상황에 유용한 패턴
SELECT 
	CASE WHEN g.Grade < 8 THEN 'NULL'
    	ELSE s.Name
    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
    	ELSE NULL
    END,
    CASE WHEN g.Grade < 8 THEN s.Marks
    	ELSE NULL
    END

'SQL' 카테고리의 다른 글

Weather Observation Station  (0) 2025.05.06
Top Competitors  (0) 2025.05.06
Contest Leaderboard  (0) 2025.05.05
Binary Tree Nodes  (0) 2025.05.05
Weather Observation Station 19  (0) 2025.05.05