Leetcode SQL Solution Day 2

Journey to Data Analyst·2022년 12월 10일
0

LeetCode

목록 보기
2/10
post-thumbnail

🔍 들어가기전에

Leetcode에는 생각보다 당장의 주니어 데이터 분석가들에게
그닥 필요없는 구문을 강제하기도 한다.

특히 Day 2에서는 UPDATE 구문과 DELETE 구문을 강제하는데
벨로그 포스팅에서는 과감히 빼려고한다.

왜냐하면 저 위 두 구문 중 DELETE 구문은 더더욱이 쓰면 안되는?
것 중 하나이기 때문이다.

그럼 이번 포스팅에는 Day 2의 첫번째 문제와 그에 관련된 내용만
올려보겠다.

💻 Calculate Special Bonus

SQL Schema

Table: Employees

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| employee_id | int     |
| name        | varchar |
| salary      | int     |
+-------------+---------+
employee_id is the primary key for this table.
Each row of this table indicates the employee ID, employee name, and salary.

Write an SQL query 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 name does not start with the character 'M'. The bonus of an employee is 0 otherwise.

Return the result table ordered by employee_id.

The query result format is in the following example.

Example 1:

Input:
Employees table:
+-------------+---------+--------+
| employee_id | name    | salary |
+-------------+---------+--------+
| 2           | Meir    | 3000   |
| 3           | Michael | 3800   |
| 7           | Addilyn | 7400   |
| 8           | Juan    | 6100   |
| 9           | Kannon  | 7700   |
+-------------+---------+--------+
Output:
+-------------+-------+
| employee_id | bonus |
+-------------+-------+
| 2           | 0     |
| 3           | 0     |
| 7           | 7400  |
| 8           | 0     |
| 9           | 7700  |
+-------------+-------+
Explanation:
The employees with IDs 2 and 8 get 0 bonus because they have an even employee_id.
The employee with ID 3 gets 0 bonus because their name starts with 'M'.
The rest of the employees get a 100% bonus.

해답

여기서는 이름이 M으로 시작하지 않는 사람과 employee_id가 홀수인 사람은
월급 100%의 보너스를 주고 그렇지 않은 사람은 보너스를 0을 준다.
그리고 이를 employee_id로 정렬한다.

는 쿼리를 작성하면 된다.

따라서,

# employee_id를 가져오고
SELECT employee_id, 
	   # employee_id가 짝수인 사람은 0을 
       CASE WHEN employee_id % 2 = 0 THEN 0
       # 이름이 M으로 시작하지 않는 사람에게는 월급을
       WHEN name not like 'M%' THEN salary
       # 이외 나머지도 0을 주고
       ELSE 0
       # 이 항목들을 bonus라는 열로 하여 끝낸다.
       END AS bonus
# Employees 테이블에서
FROM Employees
# 이 모든 쿼리를 employee_id로 정렬한다.
ORDER BY employee_id;

원래 위의 보기가 원하는 답을 쿼리로 작성한다면

CASE WHEN employee_id % 2 = 0 THEN 0
WHEN employee_id % 2 != 0 THEN salary
WHEN name not like 'M%' THEN salary

로 하는 것이 맞지만 Employees 테이블을 자세히 보면
employee_id가 3번인 사람이 M으로 시작하기 때문에
해답에서의 ELSE 0으로 퉁칠 수 있었던 것이다.

그리고 여기 답에서는 와일드카드 문자를 사용해야하는데
와일드카드 문자란,
컴퓨터에서 특정 명령어로 명령을 내릴 때, 여러 파일을 한꺼번에 지정할 목적으로 사용하는 기호를 가리키는 것을 말한다.
출처: 위키피디아

그래서 다른 문제들을 풀지 않는 대신 w3schools에서 나왔던
와일드카드 문자의 쓰임새들을 포스팅 해보도록 하겠다.

LIKE 문에서 Wildcards


출처: w3schools

다음은 Day 3의 문제들을 알아보도록 하자.

profile
성장하는 주니어 데이터 분석가(Tableau, SQL and Python)

0개의 댓글