百度關(guān)鍵詞優(yōu)化多少錢seo優(yōu)化技術(shù)教程
題目
表:?Seat
?
編寫SQL查詢來交換每兩個連續(xù)的學(xué)生的座位號。如果學(xué)生的數(shù)量是奇數(shù),則最后一個學(xué)生的id不交換。
按 id 升序 返回結(jié)果表。
查詢結(jié)果格式如下所示。
示例 1:
解題思路
前置知識
MySQL 的 MOD() 函數(shù)是取模運算的函數(shù),它返回兩個數(shù)相除的余數(shù)。其語法如下:
MOD(dividend, divisor)
其中,dividend 和 divisor 都是數(shù)值表達式,dividend 除以 divisor 并返回余數(shù)。
注意,如果除數(shù)為 0,則 MOD() 函數(shù)返回 NULL,而不會引發(fā)錯誤。
讓我們一起來看一下這道題吧!?
1.題目要求我們交換每兩個連續(xù)的學(xué)生的座位號。如果學(xué)生的數(shù)量是奇數(shù),則最后一個學(xué)生的id不交換。對于這個問題我們用case when 來解決。
2.首先我們用mod()找出為奇數(shù)的 id,并判斷此 id 是否為最后一個,也就是用 count(*)計算出所有數(shù)據(jù)的個數(shù),并與找出的 id 進行比較,若是最后一個則讓它返回 id,不對其進行交換,若不是最后一個,則讓id = id + 1。如果均不滿足上述條件,那說明 id 為偶數(shù),使 id = id -1,最后按id的升序降序排序即可。
代碼實現(xiàn)
select (casewhen mod(id,2) = 1 and id = (select count(*)from seat) then idwhen mod(id,2) then id + 1else id - 1end) as id, student
from seat
order by id
測試結(jié)果
?