반응형
*MySQL 버전, Basic Join 문제입니다.
해커랭크 The Report 문제, 샘플
- name, grade, mark 순으로 컬럼 가져오기
- grade 8 미만은 name null로 가져오기, 8 이상은 풀네임 가져오기
- grade 8 미만은 grade 내림차순 정렬, grade 같을 시 mark 오름차 순 정렬
- grade 8 이상은 grade 내림차순 정렬, grade 같을 시 name 알파벳 순 정렬
해커랭크 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 값에 중복 매핑되었다.
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 컬럼의 데이터 범위에 맞는 학생 정보가 중복 없이 매핑된다.
반응형
'SQL > HackerRank(해커랭크)' 카테고리의 다른 글
HackerRank(해커랭크) MySQL Contest Leaderboard 문제 답 (1) | 2023.10.23 |
---|---|
HackerRank(해커랭크) MySQL New Companies 문제 답 (0) | 2023.10.18 |
HackerRank(해커랭크) MySQL Occupations 문제 답 (0) | 2023.10.16 |
HackerRank(해커랭크) MySQL The PADS 문제 답 (0) | 2023.10.13 |
HackerRank(해커랭크) MySQL Type of Triangle 문제 답 (1) | 2023.10.11 |