[Hacker Rank] SQL Intermediate 'The Report' (Medium)

2025. 8. 22. 07:29·코딩 테스트/02. SQL

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

 

SELECT 
    CASE 
        WHEN b.Grade >= 8 THEN a.Name
        ELSE NULL
    END AS Name,
    b.Grade,
    a.Marks
FROM Students a
JOIN Grades b 
  ON a.Marks BETWEEN b.Min_Mark AND b.Max_Mark
ORDER BY 
    b.Grade DESC,                 
    CASE WHEN b.Grade >= 8 THEN a.Name END ASC, 
    CASE WHEN b.Grade < 8  THEN a.Marks END ASC;

 

POINT 1!

등급 테이블에서 해당하는 범위안에 속하면 그 등급을 매겨줘야하는 것

 

비등가 (범위) 조인 : = 이 아닌 <, >, BETWEEN 등으로 매칭

FROM Students a
JOIN Grades b 
  ON a.Marks BETWEEN b.Min_Mark AND b.Max_Mark

일반적으로 조인은 ON a.key = b.key 처럼 도등 조인(=)을 많이 씁니다. 

하지만 [JOIN...ON 조건] 에는 불리언 조건식이면 무엇이든 올 수 있습니다!

그래서 ON 조건에 Students 테이블에 marks가 Grade 테이블의 min_mark와 max_mark 사이에 있다는 조건을 할 수 있는 거죠

사용시 주의 사항

  • 구간이 겹치지 않게 제약 :각 점수가 한 조건에서만 참이 되도록 설계한다.
  • 성능: 동등 조인 보다  최적화가 어렵다.
    Grade가 행이 적은 테이블이면 부담이 작으나 큰 테이블끼리 하면 느려질 수 있다.
    그래서 간단한 규칙이라면 JOIN 없이 CASE로 등급을 계산하는 것도 방법이다.

POINT 2!

정렬시에 등급 구간별 다른 정렬 조건을 만족하기

 

문제 조건 :
만약 Grade가 8 이상인 학생이 여러 명 있다면 → Name 기준으로 알파벳순(오름차순)
만약 Grade가 7 이하인 학생이 여러 명 있다면 → Mark 기준으로 오름차순

 

단순 정렬 적용시 모든 학생을 대상으로 적용되기 때문에  구간을 나눠서 적용해줘야합니다.

그래서 CASE WHEN으로 분리한 겁니다!

 

단순 정렬도 해도 정답처리가 되긴했지만요 ㅎㅎ

 

ORDER BY 
    b.Grade DESC,
    CASE WHEN b.Grade >= 8 THEN a.Name END ASC,
    CASE WHEN b.Grade < 8  THEN a.Marks END ASC;

 

'코딩 테스트 > 02. SQL' 카테고리의 다른 글

[Hacker Rank] SQL Intermediate 'Contest Leaderboard' (Medium)  (0) 2025.08.22
[Hacker Rank] SQL Intermediate 'Top Competitors' (Medium)  (0) 2025.08.22
[Hacker Rank] SQL Intermediate 'Weather Observation Station 5'(Medium)  (0) 2025.08.22
[Hacker Rank] SQL Intermediate 'Placemants' (Medium)  (1) 2025.08.18
[Hacker Rank] SQL Intermediate 'Weather Observation station 20' (Medium)  (4) 2025.08.18
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [Hacker Rank] SQL Intermediate 'Contest Leaderboard' (Medium)
  • [Hacker Rank] SQL Intermediate 'Top Competitors' (Medium)
  • [Hacker Rank] SQL Intermediate 'Weather Observation Station 5'(Medium)
  • [Hacker Rank] SQL Intermediate 'Placemants' (Medium)
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    AARRR
    윈도우함수
    tableaubootcamp
    코드잇스프린트후기
    streamlit
    rank
    cross_join
    solvesql
    DENSE_RANK
    Reset
    tableau
    코딩테스트
    이행성
    쿼리테스트
    SQL
    코테
    ROW_NUMBER
    프로그래머스
    revert
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[Hacker Rank] SQL Intermediate 'The Report' (Medium)
상단으로

티스토리툴바