Leetcode – 627. Swap Salary
Given a table salary
, such as the one below, that has m=male and f=female values. 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.
Note that you must write a single update statement, DO NOT write any select statement for this problem.
Example:
| id | name | sex | salary |
|----|------|-----|--------|
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
After running your update statement, the above salary table should have the following rows:
| id | name | sex | salary |
|----|------|-----|--------|
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
Solution:
Approach: Using UPDATE
and CASE...WHEN
[Accepted]
To dynamically set a value to a column, we can use UPDATE
statement together when CASE...WHEN...
flow control statement.
UPDATE salary
SET
sex = CASE sex
WHEN 'm' THEN 'f'
ELSE 'm'
END;
or
UPDATE salary SET sex = IF (sex = "m", "f", "m");
找出最大(最新)日期(date/datetime)
Reference:
How to get rows with max date when grouping in MySQL?
SELECT t.id, m_t.MaxDTT, t.user_id
FROM
(SELECT MAX(login_datetime_record) AS MaxDTT, user_id
FROM <table>
GROUP BY user_id) AS m_t
INNER JOIN <table> AS t
ON t.user_id = m_t.user_id AND t.login_datetime_record = m_t.MaxDTT;