본문 바로가기

[LeetCode] 1873. Calculate Special Bonus

by qwee0328 2025. 3. 17.

📝 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 문제 해결 방법

  1. CASE문을 사용하여 조건에 맞는 보너스를 계산
    • CASE문을 사용하여 직원 ID가 홀수이고, 이름이 'M'으로 시작하지 않으면 보너스는 급여(salary)로 설정하고, 그렇지 않으면 보너스는 0으로 설정합니다.
  2. 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
반응형