«   2024/07   »
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 31
Recent Posts
Today
Total
관리 메뉴

짜리몽땅 매거진

[SQL] Leetcode/HackerRank 코딩테스트 연습 1 본문

Data/SQL

[SQL] Leetcode/HackerRank 코딩테스트 연습 1

쿡국 2024. 3. 4. 15:55

문제1.  Managers with at Least 5 Direct Reports

출처 : Leetcode - Medium

https://leetcode.com/problems/managers-with-at-least-5-direct-reports/description/?envType=study-plan-v2&envId=top-sql-50

 

정답 쿼리

select name
from employee
where id in (select managerID 
		from employee 
		group by managerID 
		having count(*)>=5)

 

문제 해설

1. 주요 포인트 1 - where절 서브쿼리

where id in (select managerID 
	from employee 
	group by managerID 
	having count(*)>=5)

 

where 절에 서브쿼리 사용 → managerID 칼럼에 ID가 5개 이상 있다면 5명 이상의 employee를 관리하고 있다는 뜻.

 


문제 2.  ROOT 아이템 구하기

출처 : The Report

https://www.hackerrank.com/challenges/the-report/problem?isFullScreen=true

 

정답 쿼리

select
(case when b.grade < 8 then null
else a.name
end) as name,
b.grade, a.marks
from students a
join grades b
on a.marks between b.min_mark and b.max_mark
order by grade desc, name, marks

 

문제 해설

 

—> ITEM_TREE 테이블에서 PARENT_ITEM_ID가 NULL인 ITEM_ID와 ITEM_NAME을 출력해라.

 

1. 주요 포인트 1 - case when then 구문

select
(case when b.grade < 8 then null
else a.name
end) as name,

 

case when then 구문을 사용하여 등급이 8보다 낮을 경우 null로, 8이상일 경우 해당 학생의 이름을 출력.

 

2. 주요 포인트 2 - between 조인

from students a
join grades b
on a.marks between b.min_mark and b.max_mark

 

조인할 때 흔히 사용하던 ‘기본키=외래키’ 구조가 아님. 주어진 점수 범주에 따라 등급이 책정되므로 between을 사용.