코딩테스트/HackerRank

[Basic Join] The Report(Oracle)

봉두두 2022. 5. 3. 16:02
728x90
Level : SQL (Intermediate)

 

HackerRank에서 지난번에 The PADS 문제를 풀면서  We Do not allow non ASCII characters for this challenge 에러가 왜 발생하는지 모른채로 지나갔었다.

 

 

[Advanced select] The PADS(Oracle)

We Do not allow non ASCII characters for this challenge 와 같은 유사한 오류문구가 출력됐었는데, 아직 언제 이런 오류가 뜨는건지는 잘 모르겠다. 어쨌든 아래는 처음에 안되었지만.. 다시해보니 성공한 quer

jy0605.tistory.com

 

이제 원인을 알게 됐다.

Query 초반에 달아두었던 주석을 모두 지우면 해당 에러가 발생하지 않는다. ;;;;

생각보다 별 것 아닌 문제였네.(?)

 

이번 문제는 Equal join이 아닌 Non-Equal Join을 활용하는 문제.

order by 조건이 multiple일 때 comma(,)를 활용한다라는 것.

이 두 가지를 알고 있다면 어렵지 않게 풀 수 있다.

 

아, 지난번 The PADS 문제를 풀 때 포스팅했던 내용이지만

두 가지 결과를 출력할 때 union (all)으로 묶을 필요 없이 그냥 쿼리 두 개를 따로따로 작성하면 된다.

 

-- Conditions =>
-- Name, Grade, Mark를 출력한다.
-- Grade에 대해 descending ordering
-- 동일 등급을 가진 학생에 대해서는 이름을 알파벳순으로 정렬한다.

-- 등급이 8보다 작으면 학생들 이름을 null로 출력한다.
-- Grade에 대해 descending ordering
-- 동일 등급을 가진 학생에 대해서는 marks에 대해 ascending ordering 한다.

select std.Name, grd.Grade, std.Marks
from (select * from students where marks>=70) std
left join grades grd on std.Marks >= grd.min_mark and std.Marks <= grd.max_mark
order by grd.Grade desc, name asc;

select 'NULL', grd.Grade, std.Marks
from (select * from students where marks<70) std
left join grades grd on std.Marks >= grd.min_mark and std.Marks <= grd.max_mark
order by grd.Grade desc, std.Marks asc;
728x90
728x90