해커랭크 sql easy 문제 중에서 나름(?) 어려웠던 문제만 풀어봤습니다. 풀고 보니 max score가 20점 이상인 문제들이네요. Mysql 기준입니다
- Type of Triangle
삼각형 여부 및 종류를 판단하는 쿼리를 작성하는 문제입니다.
* 삼각형 여부 및 종류
- Equilateral : 정삼각형. 삼각형 집합의 교집합
- Isosceles : 이등변삼각형
- Scalene : 삼각형. 삼각형 집합 전체
- Not A Triangle : 두 변의 합이 나머지 변보다 길지 않은 경우. 삼각형 집합의 여집합
* case when 구문을 사용해서 조건 충족 여부를 판단하면 됩니다.
두 변의 합이 다른 변보다 길지 않은 경우, 세 변의 길이가 같은 경우, 두 변의 길이가 같은 경우에 대해 조건을 걸어줍니다.
조건을 걸어주는 순서는 '삼각형의 여집합 > 이등변삼각형의 교집합 > 이등변삼각형 > 이등변삼각형의 여집합과 삼각형의 교집합'입니다.
case when a+b<=c or b+c<=a or a+c<=b then "Not A Triangle"
when a=b and b=c then "Equilateral"
when (a=b or b=c or c=a) then "Isosceles" else "Scalene" end
* case when 구문을 select 절의 서브쿼리로 넣으면 끝!
- Draw The Triangle
아래 그림은 p(5) 패턴입니다. p(20) 패턴을 작성하는 쿼리를 작성하는 문제입니다.
* 1,2 모두 with recursive문을 사용합니다.
with recursive문은 with문을 반복할 때 사용합니다. 아래 코드에서 p20은 테이블명이 됩니다.
with recursive p20 as (
select 20 as n
union all
select n-1 as n
from p20
where n>0)
'20'만 있는 테이블과 20부터 하나씩 줄어드는 숫자를 가진 테이블을 union 합니다. 겹치는 부분이 없으므로 union과 union all의 차이가 없습니다. with recursive문 실행 결과, p20 테이블에는 1~20의 숫자가 담기게 됩니다.
select repeat("* ", n)
from p20
그다음, n만큼 * 을 반복하는 쿼리를 작성하면 끝!
- Top Earners
개인적으로 앞 2문제보다는 쉬운 문제라고 생각합니다.
최대 전체 수입과 최대 전체 수입에 해당하는 직원 수를 찾는 쿼리를 작성하는 문제입니다.
* 전체 수입 = 월별 수입 * 근무 개월
select salary * months, count(distinct name)
from employee
group by salary * months
order by salary * months desc
limit 1
최대 전체 수입에 해당하는 직원을 찾아야 하므로 전체 수입을 기준으로 group by를 실시합니다.
최대 전체 수입을 찾기 위해 order by 전체 수입 desc limit 1을 사용합니다.
'Data > SQL' 카테고리의 다른 글
[리트코드] SQL 50 - Basic Aggregate Functions 문제 풀이(# 1251, # 1174, # 550) (0) | 2023.10.09 |
---|---|
[리트코드] SQL 50 - Basic Join 문제 풀이(# 1280, # 570, # 1934) (0) | 2023.10.01 |
해커랭크 SQL 문제 풀이 - Medium ③ (0) | 2023.05.22 |
해커랭크 SQL 문제풀이 - Medium ② (0) | 2023.05.17 |
해커랭크 SQL 문제풀이 - Medium ① (1) | 2023.05.15 |