Leetcode에는 생각보다 당장의 주니어 데이터 분석가들에게
그닥 필요없는 구문을 강제하기도 한다.
특히 Day 2에서는 UPDATE
구문과 DELETE
구문을 강제하는데
벨로그 포스팅에서는 과감히 빼려고한다.
왜냐하면 저 위 두 구문 중 DELETE
구문은 더더욱이 쓰면 안되는?
것 중 하나이기 때문이다.
그럼 이번 포스팅에는 Day 2의 첫번째 문제와 그에 관련된 내용만
올려보겠다.
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에서 나왔던
와일드카드 문자의 쓰임새들을 포스팅 해보도록 하겠다.
다음은 Day 3의 문제들을 알아보도록 하자.