일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- airflow 설치
- not in
- mysql :=
- Limit
- 데이터리안 웨비나
- pandas
- TRUNCATE
- 그로스해킹
- seaborn
- 데이터분석
- SQLite
- 다중 JOIN
- GROUPBY
- PostgreSQL
- MySQL
- matplotlib
- 전처리
- solvesql
- 데이터시각화
- Oracle
- 결측값
- 파이썬
- hackerrank
- 프로그래머스
- 머신러닝
- Round
- having
- SUM
- join
- SQL
- Today
- Total
Milky's note
[HackerRank](M) The Report 본문
[문제]
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.
Sample Output
Maria 10 99
Jane 9 81
Julia 9 88
Scarlet 8 78
NULL 7 63
NULL 7 68
Note
Print "NULL" as the name if the grade is less than 8.
[답]
- mysql
select if(g.grade<8,'NULL',s.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, s.name, s.marks
문제 푸는데 좀 헤맸다... 점수별로 case 문을 써야하나 했는데 inner join이 범위도 지정할 수 있다는 사실을 배웠다.
쿼리가 대박 짧아졌다.
그리고 성적이 8 미만인 학생들은 익명을 보장해주어야 해서 이름이 아닌 null로 출력되게 하여야한다.
조건을 추가하려고 if 를 사용했다. 맞으면 2번째 파라미터, 그렇지 않으면 3번째 파라미터 값을 출력한다.
정렬은 순서가 좀 복잡한데 일단 grade가 높은 학생부터 출력하고, grade가 같으면 알파벳순서이기 때문에 이름의 오름차순, 다음으로 다 같으면 marks가 낮은 순으로 정렬을 하는 것이 조건이다.
천천히 하나씩 읽으면 복잡하지는 않는데 inner join에서 범위 조절 다시 한번 공부해야겠다.
'SQL > SQL 코딩 테스트-HackerRank' 카테고리의 다른 글
[HackerRank](E) Draw The Triangle 2 (0) | 2022.03.26 |
---|---|
[HackerRank](E) Draw The Triangle 1 (0) | 2022.03.26 |
[HackerRank](E) Average Population of Each Continent (0) | 2022.03.25 |
[HackerRank](E) African Cities (0) | 2022.03.25 |
[HackerRank](E) Population Census (0) | 2022.03.25 |