📝 1873. Calculate Special Bonus
🔹 특별 보너스 계산
각 직원의 보너스를 계산하는 솔루션을 작성하세요. 직원의 ID가 홀수이고 이름이 'M'으로 시작하지 않는 경우 직원의 보너스는 급여의 100%입니다. 그렇지 않으면 직원의 보너스는 0입니다.
Employee_id별로 정렬된 결과 테이블을 반환합니다.
📝 문제 설명
Calculate Special Bonus(1873번) 문제는 직원의 ID와 이름을 기준으로 특별 보너스를 계산하는 문제입니다.
다음 조건에 따라 보너스를 계산해야 합니다.
- 직원의 employee_id가 홀수이고
- 직원의 name이 'M'으로 시작하지 않는 경우
위 조건을 만족하면 보너스는 급여(salary)의 100%,
그렇지 않으면 보너스는 0입니다.
최종 결과는 employee_id를 기준으로 오름차순 정렬해야 합니다.
📊 테이블 구조
Employees 테이블
Column Name | Type |
employee_id | int |
name | varchar |
salary | int |
💡 SQL 문제 해결 방법
- CASE문을 사용하여 조건에 맞는 보너스를 계산
- CASE문을 사용하여 직원 ID가 홀수이고, 이름이 'M'으로 시작하지 않으면 보너스는 급여(salary)로 설정하고, 그렇지 않으면 보너스는 0으로 설정합니다.
- employee_id를 기준으로 오름차순 정렬
- ORDER BY employee_id를 사용하여 employee_id 기준으로 결과를 오름차순으로 정렬합니다.
반응형
🖥️ SQL 풀이
SELECT employee_id
, CASE WHEN employee_id % 2 = 1 AND name NOT LIKE 'M%' THEN salary
ELSE 0
END AS bonus
FROM Employees
ORDER BY employee_id;
🔍 쿼리 분석
- CASE문: 이 구문은 조건을 검사하여 직원이 홀수 ID를 가지고 있고, 이름이 'M'으로 시작하지 않으면 급여(salary)를 보너스로 설정하고, 그렇지 않으면 보너스를 0으로 설정합니다.
- ORDER BY employee_id: 결과를 employee_id 기준으로 오름차순으로 정렬하여 직원들을 정렬된 순서로 반환합니다.
📌 실행 예제
📊 입력 데이터
Employees 테이블
employee_id | name | salary |
2 | Meir | 3000 |
3 | Michael | 3800 |
7 | Addilyn | 7400 |
8 | Juan | 6100 |
9 | Kannon | 7700 |
쿼리 실행 결과
employee_id | bonus |
2 | 0 |
3 | 0 |
7 | 7400 |
8 | 0 |
9 | 7700 |
- id가 2, 8인 직원은 employee_id 가 짝수이므로 보너스가 0입니다.
- id가 3인 직원은 이름이 M으로 시작하기 때문에 보너스가 0입니다.
- 나머지 직원은 보너스를 100% 받습니다.
🎯 결론
이 문제는 CASE WHEN을 활용하여 조건부 보너스 지급 로직을 구현하는 방법을 연습할 수 있습니다.
특히, LIKE 연산자를 활용한 문자열 패턴 매칭과 ORDER BY 정렬이 중요한 포인트입니다.
SQL을 사용할 때 조건에 따른 데이터 필터링 및 계산 방법을 익히기에 좋은 문제입니다.
더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀
728x90
반응형
'LeetCode' 카테고리의 다른 글
[LeetCode] 1965. Employees With Missing Information (0) | 2025.03.18 |
---|---|
[LeetCode] 1890. The Latest Login in 2020 (2) | 2025.03.18 |
[LeetCode] 1795. Rearrange Products Table (0) | 2025.03.12 |
[LeetCode] 1741. Find Total Time Spent by Each Employee (0) | 2025.03.11 |
[LeetCode] 1693. Daily Leads and Partners (0) | 2025.03.10 |