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
;