SQL/문제풀이

[HackerRank] The Report

응엉잉 2024. 5. 9. 20:09

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

1. 기본 골자 만들어주기

WITH sub AS (
    SELECT s.name,
        g.grade,
        s.marks
    FROM students s
        INNER JOIN grades g ON s.marks BETWEEN g.min_mark AND g.max_mark) 
        -- s.marks가 min_mark와 max_mark 사이에 있는 경우에 대해 JOIN

이 테이블을 활용해야 하므로 WITH절 서브쿼리 형태로 빼내줌

 

2. grade에 따라 name 출력이 달라지므로 CASE문을 이용해서 조건에 따라 name이 다르게 출력되도록 설정

SELECT CASE WHEN grade >= 8 THEN name ELSE NULL END AS name,
    grade,
    marks
FROM sub

 

3. ORDER BY 조건을 적용

grade 8 이상인 경우 grade DESC, name

grade 8 미만인 경우 grade DESC, mark 인데

ORDER BY grade DESC, name, marks

 

이렇게 작성하면 됨

grade 8 미만인 경우 name이 어짜피 NULL이기 때문에 !

 

WITH sub AS (
    SELECT s.name,
        g.grade,
        s.marks
    FROM students s
        LEFT JOIN grades g ON s.marks BETWEEN g.min_mark AND g.max_mark)

SELECT CASE WHEN grade >= 8 THEN name ELSE NULL END AS name,
    grade,
    marks
FROM sub
ORDER BY grade DESC, name, marks

 

사실 ! 굳이 서브쿼리를 사용하지 않고도 풀 수 있던 문제였다.

SELECT CASE WHEN g.grade < 8 THEN NULL ELSE s.name END AS name,
        g.grade,
        s.marks
FROM students s
    INNER JOIN grades g ON s.marks BETWEEN g.min_mark AND g.max_mark
ORDER BY g.grade DESC, name, marks

 

1. INNER JOIN ON 조건에 BETWEEN 사용 가능

2. CASE문을 이용해서 특정 조건일 때 NULL 집어넣을 수 있음

3. 정렬기준 여러개일때 순서 고려해주기

'SQL > 문제풀이' 카테고리의 다른 글

[HackerRank] Conest Leaderboard  (0) 2024.05.10
[HackerRank] Interviews  (0) 2024.05.09
[HackerRank] Challenges 📌  (0) 2024.05.09
[HackerRank] Top Earners / N가지 풀이  (0) 2024.05.08
[Leetcode] Department top three salaries  (0) 2024.05.08