HAZEL

[SQL : CASE문 / UPDATE ] LeetCode : 627. Swap Salary 본문

DATA ANALYSIS/SQL

[SQL : CASE문 / UPDATE ] LeetCode : 627. Swap Salary

Rmsid01 2021. 3. 8. 15:24

627. Swap Salary


>> 문제

+-------------+----------+
| Column Name | Type     |
+-------------+----------+
| id          | int      |
| name        | varchar  |
| sex         | ENUM     |
| salary      | int      |
+-------------+----------+
id is the primary key for this table.
The sex column is ENUM value of type ('m', 'f').
The table contains information about an employee.

Write an SQL query to swap all 'f' and 'm' values (i.e., change all 'f' values to 'm' and vice versa) with a single update statement and no intermediate temp table(s).

Note that you must write a single update statement, DO NOT write any select statement for this problem.

The query result format is in the following example:

 

Salary table:
+----+------+-----+--------+
| id | name | sex | salary |
+----+------+-----+--------+
| 1  | A    | m   | 2500   |
| 2  | B    | f   | 1500   |
| 3  | C    | m   | 5500   |
| 4  | D    | f   | 500    |
+----+------+-----+--------+

Result table:
+----+------+-----+--------+
| id | name | sex | salary |
+----+------+-----+--------+
| 1  | A    | f   | 2500   |
| 2  | B    | m   | 1500   |
| 3  | C    | f   | 5500   |
| 4  | D    | m   | 500    |
+----+------+-----+--------+
(1, A) and (2, C) were changed from 'm' to 'f'.
(2, B) and (4, D) were changed from 'f' to 'm'.

 

>> 문제푼 코드

UPDATE Salary
SET 
    sex = CASE sex 
        WHEN 'f' THEN 'm'
        ELSE 'f'         
    END

**  이 문제의 포인트는 ' 값을 update ' 해준다는 점이다. 

단순히, select 에서 case 문을 써줄때는 값이 변경되는 것이 아니라, then 값으로 보여지는 것이다.

 

UPDATE 의 구문은 : UPDATE 테이블 명 SET 열명 = 값 WHERE 조건식 ; 

 

이 때, 조건에 따라서 ( WHERE 이 아닌, IF ) 다르게 열명을 변경하고 싶다면, 

SET 절에 CASE 문을 넣어준다. 

SET = CASE  : CASE 문의 결과에 따라서 값을 변경해준다는 의미이다.

 

이 코드에서는 특정 코드에만 변경하라는 말이 없기 때문에 WHERE 은 생략한다. 

 

꼭 기억해서, 이러한 유형이 있으면  이런식으로 풀자 !! 

 

UPDATE Salary
SET 
    sex = CASE  
        WHEN sex = 'f' THEN 'm'
        ELSE 'f'         
    END

** WHEN 의 기준을 안으로 집어 넣어도 가능하다. 

** WHEN id = '1' THEN '일번사람'  이런식으로, SEX = CASE 여도 WHEN 의 기준을 달라질 수 있다. 

 

 

leetcode.com/problems/swap-salary/

 

Swap Salary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com