문제
- LeetCode SQL 문제
1468. Calculate Salaries / Medium
- 문제 내용 : [링크]
내가 작성한 Query
WITH temp_01 as( SELECT company_id, MAX(salary) as max_salary FROM salaries GROUP BY company_id ) SELECT s.company_id , s.employee_id , s.employee_name , CASE WHEN t.max_salary < 1000 THEN s.salary WHEN t.max_salary <= 10000 THEN round(s.salary*(1-0.24), 0) ELSE round(s.salary*(1-0.49), 0) END AS salary FROM salaries s JOIN temp_01 t WHERE s.company_id = t.company_id
세금 비율을 계산하기 위해, 각 회사별 MAX(salary)
값을 구하는 임시 테이블 (temp_01
)을 구한다.
company_id
, employee_id
, employee_name
을 추출한다.
회사별 MAX(salary)
가 포함된 temp_01
테이블과 salaries
테이블을 company_id
를 기준으로 JOIN
해준다.
company_id
, employee_id
, employee_name
을 추출한다.
CASE WHEN THEN
구문을 통해, 문제의 요구사항에 따라 max_salary
가 1000 미만인 경우, 1000 이상 10000 이하인 경우, 10000 이상인 경우 세금 비율을 반영한 salary
를 계산한다.
정수 부분만 추출하기 위해 ROUND()
함수를 활용한다.
⭐⭐⭐
temp_01
임시 테이블을 작성할 때,CASE WHEN THEN
구문을 통해salary
별 세금 비율을 먼저 구하는 방법으로도 쿼리를 작성할 수 있다. 이 경우, 최종 salary
를 구하는 쿼리가 더 단순해질 수 있다.