SQL練習(xí)筆記二:換座位
點(diǎn)擊上方藍(lán)字關(guān)注「網(wǎng)優(yōu)小兵玩Python」
◆?◆?◆
題目:小美是一所中學(xué)的信息科技老師,她有一張 seat 座位表,平時(shí)用來(lái)儲(chǔ)存學(xué)生名字和與他們相對(duì)應(yīng)的座位 id。其中縱列的id是連續(xù)遞增的小美想改變相鄰倆學(xué)生的座位。
注意:如果學(xué)生人數(shù)是奇數(shù),則不需要改變最后一個(gè)同學(xué)的座位。
-- 創(chuàng)建seat表CREATE TABLE seat(id int(4) not NULL,student VARCHAR(10) not NULL);-- 插入數(shù)據(jù)INSERT INTO seat VALUE(1,'Abbot');INSERT INTO seat VALUE(2,'Doris');INSERT INTO seat VALUE(3,'Emerson');INSERT INTO seat VALUE(4,'Green');INSERT INTO seat VALUE(5,'Jeames');

--?解法1:使用UNION憑借查詢結(jié)果SELECT*FROM(-- id為偶數(shù)則id-1 --SELECTid - 1 AS id,studentFROMseatWHEREid % 2 = 0 UNION ALLSELECT-- id為非最大奇數(shù)則id加1 --id + 1 AS id,studentFROMseatWHEREid % 2 <> 0AND id <(SELECTmax( id )FROMseat) UNION ALLSELECT -- 查找最后一個(gè)id,且為奇數(shù) --*FROMseatWHEREid =(SELECTmax( id )FROMseat)AND id % 2 <> 0) AS tempORDER BYid;
--?解法2:使用CASE條件分支判斷查詢SELECT(CASEWHEN id%2= 1 AND id != ( SELECT MAX( id ) FROM seat ) THEN id + 1WHEN id%2= 0 THEN id - 1ELSE idEND) AS id,studentFROMseatORDER BYid;
兩種查詢語(yǔ)句查詢結(jié)果如下:

總結(jié):本題的知識(shí)點(diǎn)就是CASE條件分支,在不知道CASE之前,我使用了最笨的一種方法,分別查詢出奇數(shù)、偶數(shù)及最后一位的id再對(duì)id值進(jìn)行調(diào)整(奇數(shù)加1,偶數(shù)減1,最后一id值位不變),最后再將查詢結(jié)果進(jìn)行UNION拼接并ORDER BY升序排序,語(yǔ)句過(guò)于繁瑣冗長(zhǎng),其意思跟使用解法2中的CASE條件分支查詢一樣。
網(wǎng)優(yōu)苦短,我用Python


網(wǎng)優(yōu)小工具傳送門

評(píng)論
圖片
表情
