
문제
- 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를 구하는 쿼리가 더 단순해질 수 있다.
