SQL/HackerRank(해커랭크)

HackerRank(해커랭크) MySQL The Report 문제 답

진리뷰 2023. 10. 27. 09:00
반응형

 

 

HackerRank(해커랭크)-MySQL-the-report-문제-답-썸네일
The Report

 

 

*MySQL 버전, Basic Join 문제입니다.

 

 

 

해커랭크 The Report 문제, 샘플

 

  • name, grade, mark 순으로 컬럼 가져오기
  • grade 8 미만은 name null로 가져오기, 8 이상은 풀네임 가져오기
  • grade 8 미만은 grade 내림차순 정렬, grade 같을 시 mark 오름차 순 정렬
  • grade 8 이상은 grade 내림차순 정렬, grade 같을 시 name 알파벳 순 정렬

해커랭크-thereport-문제
The Report 문제

 

 

해커랭크-thereport-샘플해커랭크-thereport-테이블
The Report 샘플, 테이블

 

 

 

해커랭크 The Report 답

 

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

FROM students s
JOIN grades g
ON s.marks >= g.min_marks
AND s.marks <= g.max_marks

ORDER BY grade DESC, name, marks;

 

 

 

추가 정리

 

  • JOIN

보통  JOIN을 배우고 사용할 때, 아래처럼 ON 뒤에 두 테이블의 공통키를 하나 입력한다.

SELECT * FROM a
JOIN b ON a.user_id = b.user_id;

 

본 문제를 예시로, 만약 ON이 없다면 어떻게 되는지 확인해보자.

SELECT * FROM students
JOIN grades;

 

ON이 없어서 grades 테이블의 모든 값이 다 결합됨.

samantha는 87점이어서 grade = 9여야 하는데, 테이블 grades의 모든 grade 값에 중복 매핑되었다.

on미입력
ON 미입력

 

 

samantha가 grade=9에만 매핑되기 위해서는 ON을 입력해야 한다.

하지만 이 문제는 테이블 students와 grades 간 단 하나의 공통키가 없다.

그래서 아래와 같이 범위 내 점수가 있다면, 해당 grade에 매핑되도록 ON 뒤에 범위를 설정한다.

SELECT * FROM students
JOIN grades
ON students.marks >= grades.min_mark
AND students.marks <= grades.max_mark;

 

min_mark와 max_mark 컬럼의 데이터 범위에 맞는 학생 정보가 중복 없이 매핑된다.

on예시2
ON 입력

반응형
top