SQL中關於換座位的問題

需求

小美是一所中學的信息科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 id。

其中縱列的 id 是連續遞增的

小美想改變相鄰倆學生的座位。

你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢?

示例:

在這裏插入圖片描述

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

在這裏插入圖片描述

注意:

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

解答

使用 CASE

算法

對於所有座位 id 是奇數的學生,修改其 id 爲 id+1,如果最後一個座位 id 也是奇數,則最後一個座位 id 不修改。對於所有座位 id 是偶數的學生,修改其 id 爲 id-1。

首先查詢座位的數量。


SELECT
    COUNT(*) AS counts
FROM
    seat

在這裏插入圖片描述

然後使用 CASE 條件和 MOD 函數修改每個學生的座位 id。

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;

在這裏插入圖片描述

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