https://www.hackerrank.com/challenges/the-report/problem?isFullScreen=true
Column | Type |
ID | Integer |
Name | String |
Marks | Integer |
Students 테이블:
- ID: 테이블의 고유 키
- Name : 이름
- Marks : 점수
Ketty는 Eve에게 세 개의 열(Name, Grade, Mark)을 포함하는 보고서를 생성하는 과제를 부여했습니다. Ketty는 8보다 낮은 점수를 받은 학생들의 이름이 포함되지 않기를 원합니다. 보고서는 Grade가 높은 순서대로 정렬되어야 합니다. 동일한 Grade(8-10)를 받은 학생이 여러 명일 경우, 해당 학생들은 이름을 알파벳 순서대로 정렬해야 합니다. 마지막으로, Grade가 8보다 낮은 경우, 이름을 "NULL"로 사용하고 해당 Grade는 내림차순으로 정렬합니다. 동일한 Grade(1-7)를 받은 학생이 여러 명일 경우, 해당 학생들은 점수를 오름차순으로 정렬해야 합니다.
select *
from Students S
inner join Grades G on S.Marks between G.Min_Mark and G.Max_Mark
조건에 따라 두 테이블을 결합한다.
Students의 Marks열의 Grades에 포함되는 점수 구간에 따라서 Grade를 표시하도록 한다.
select
case
when G.Grade >= 8 then S.Name
else 'NULL'
end,
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,
필요한 데이터를 필터링하고 Grade가 8보다 작은 경우에는 이름을 NULL로 표기한다.
그리고 Grade를 기준으로 내림차순 정렬한다.
select
case
when G.Grade >= 8 then S.Name
else 'NULL'
end,
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,
case
when G.Grade >= 8 then S.Name
when G.Grade < 8 then S.Marks
else NULL
end
정렬에 조건을 추가한다.
case when 구문으로 Grade가 8 이상일 경우 이름을 기준으로 정렬하고 아닐 경우 점수를 기준으로 정렬한다.
처음 사용해보는 개념이 많았던 문제였다. 두 테이블을 결합할 때, 조건을 사용하는 것은 몇번 보았지만 between을 사용해본것은 처음이었고 order by를 통해서 정렬을 할 때, 조건문을 적용할 수 있는지는 몰랐다.
'코딩일기' 카테고리의 다른 글
SQL 코드카타 172 - Top Competitors (2) | 2024.07.24 |
---|---|
알고리즘 코드카타 115 - 호텔 대실 (2) | 2024.07.23 |
SQL 코드카타 170 - Weather Observation Station 20 (0) | 2024.07.22 |
SQL 코드카타 169 - New Companies (0) | 2024.07.22 |
SQL 코드카타 168 - Binary Tree Nodes (0) | 2024.07.21 |