MySQL實現簡單交換數據--交換ID

0x01.需求

小美是一所中學的信息科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 id
其中縱列的 id 是連續遞增的。
小美想改變相鄰倆學生的座位。
你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢?
示例:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+

假如數據輸入的是上表,則輸出結果如下:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+

注意: 如果學生人數是奇數,則不需要改變最後一個同學的座位。
SQL架構:

Create table If Not Exists seat(id int, student varchar(255))
Truncate table seat
insert into seat (id, student) values ('1', 'Abbot')
insert into seat (id, student) values ('2', 'Doris')
insert into seat (id, student) values ('3', 'Emerson')
insert into seat (id, student) values ('4', 'Green')
insert into seat (id, student) values ('5', 'Jeames')

0x02.解決需求思路

交換id的整體思路如下:

  • 先查詢座位數量,目的是得到最後一位同學的id。
  • 使用CASE ENDWHEN THEN語句。
  • 如果id是奇數,則id+1,最後一位同學不變。
  • 如果id是偶數,則id-1。
  • 最後對錶格進行升序排序。

0x03.SQL語句

SELECT 
    (CASE
        WHEN MOD(id,2)!=0 AND counts!=id THEN id+1
        WHEN MOD(ID,2)!=0 AND counts=id THEN id
        ELSE id-1
    END) AS id,
        student
FROM
    seat,
    (SELECT
        COUNT(*) AS counts
     FROM  
        seat) AS seat_counts
ORDER BY id ASC;

ATFWUS --Writing By 2020–03–31

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章