tak's data blog
[SQL] HackerRank - The Report 본문
출처: https://www.hackerrank.com/challenges/the-report/problem?isFullScreen=true
여러 데이터 분석 직무의 코딩 테스트 혹은 데이터를 자유자재로 뽑아내는 연습을 하기 위해
프로그래머스 고득점 kit를 여러번 끝내고 hackerrank를 통해 SQL을 연습하고 있습니다.
확실히 프로그래머스보다는 난이도가 있으며, 영어로 된 지문이라 문제풀이에 헷갈림이 있는데 그래도 재밌게 풀어보고 있습니다 ㅎㅎ
문제 :
You are given two tables: Students and Grades. Students contains three columns ID, Name and Marks.
Grades contains the following data:
Ketty gives Eve a task to generate a report containing three columns: Name, Grade and Mark. Ketty doesn't want the NAMES of those students who received a grade lower than 8. The report must be in descending order by grade -- i.e. higher grades are entered first. If there is more than one student with the same grade (8-10) assigned to them, order those particular students by their name alphabetically. Finally, if the grade is lower than 8, use "NULL" as their name and list them by their grades in descending order. If there is more than one student with the same grade (1-7) assigned to them, order those particular students by their marks in ascending order.
Write a query to help Eve.
문제 조건은 아래와 같습니다.
- students 테이블과 grades테이블을 활용해서 8등급 미만의 학생들은 이름 출력 X
- grade별로 내림차순
- 같은 grade 학생이 2명 이상이면 이름을 알파벳 순으로
- 이름이 null이면 점수 순
- 8 grade 미만은 이름을 NULL로 처리
select case when g.grade < 8
then null
else s.name
end as name
, g.grade
, s.marks
from students as s
inner join grades g
on s.marks between g.min_mark and g.max_mark
order by g.grade desc, s.name, s.marks
grade에 대한 조건을 case문으로 수행하였고 이 부분은 if문으로 대체 가능합니다.
또한 inner join에서 between을 통해 grade에 속하는 학생을 뽑아내는 방법은 처음 알았습니다.
order by절은 주어진 조건대로 행하면 끝입니다.
이번 글도 읽어주셔서 감사합니다!
'SQL' 카테고리의 다른 글
[SQL] HackerRank - Challenges (0) | 2022.03.17 |
---|---|
[SQL] HackerRank - Contest Leaderboard (1) | 2022.02.12 |
Python SQL 연동 (0) | 2021.04.12 |
PostgreSQL 문제풀이 8 (0) | 2021.02.22 |
PostgreSQL 엑셀 데이터 연동 (0) | 2021.02.16 |