SQL/LeetCode
[SQL] Calculate Special Bonus(LeetCode/Oracle)
DBwiz
2023. 10. 29. 14:50
안녕하세요!
이번 포스팅은 LeetCode에 있는 Calculate Special Bonus 문제를 OracleDB로 풀어보려고 합니다!
(모든 문제는 Oracle로 풀이하겠습니다.)
1. 문제 링크 : https://leetcode.com/problems/calculate-special-bonus/description/
2. 문제
| Column name | Type |
| employee_id | int |
| name | varchar |
| salary | int |
[문제] Write a solution to calculate the bonus of each employee. The bonus of an employee is 100% of their salary if the ID of the employee is an odd number and the employee's name does not start with the character 'M'. The bonus of an employee is 0 otherwise.
Return the result table ordered by employee_id.
각 종업원의 상여금을 계산하는 문제입니다.
3. 제출 쿼리 및 설명
1) EMPLOYEE_ID가 홀수이고, 이름이 M으로 시작하지 않는 직원을 조회합니다.
SELECT *
FROM EMPLOYEES
WHERE MOD(EMPLOYEE_ID,2) = 1
AND NAME NOT LIKE 'M%'
2) 모든 종업원의 bonus를 조회하기 위해서 원본 테이블을 왼쪽에 두고 LEFT JOIN 합니다.
FROM EMPLOYEES E1,(
SELECT *
FROM EMPLOYEES
WHERE MOD(EMPLOYEE_ID,2) = 1
AND NAME NOT LIKE 'M%'
) E2
WHERE E1.EMPLOYEE_ID = E2.EMPLOYEE_ID(+)
최종) 각 EMPLOYEE의 BONUS를 조회하는데 만약 BONUS가 없다면 0으로 반환해서 조회합니다.
SELECT E1.EMPLOYEE_ID, NVL(E2.SALARY, 0) AS BONUS
FROM EMPLOYEES E1,(
SELECT *
FROM EMPLOYEES
WHERE MOD(EMPLOYEE_ID,2) = 1
AND NAME NOT LIKE 'M%'
) E2
WHERE E1.EMPLOYEE_ID = E2.EMPLOYEE_ID(+)
ORDER BY E1.EMPLOYEE_ID
;