小美是一所中學的資訊科技老師,她有一張 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 |
+---------+---------+
如果學生人數是奇數,則不需要改變最後乙個同學的座位。
①^表示的按位異或運算----異或運算的規則是,同位如果不同則為1,相同為0
比如2的二進位制是10,1的二進位制為01,2^1,得到二進位制數11,即3,
同理3的二進位制是11,1的二進位制為01,3^1,得到二進位制數10,即2,
所以4(100)-5(101),5(101)-4(100),依次類推。
因此從0開始的自然數與1進行按位異或運算能夠得到相鄰奇偶數的互換。
case
when a then b
else c
end
if
((a)
, b,
if(c,d,e)
)
1.id為奇數時,id+1 ; id為偶數時,id-1 ; id最大為奇數時,不變
2.將id+1與1做異或,交換奇偶位置的數,再利用rank()函式排序
select
(case
when
mod(id,2)
=1and id =
(select
count(*
)from seat)
then id
when
mod(id,2)
=1then id+
1else id-
1end
)as id, student
from seat
order
by id;
selectif(
(mod
(id,2)
=1and id =
(select
max(id)
from seat)),
id,if(
mod(id,2)
=1,id+
1,id-1)
)as id,student
from seat
order
by id
select rank(
)over
(order
by(id-1)
^1)as id
,student
from seat
每日刷題 奇偶鍊錶
請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null 輸出 1 3 5 2 4 null 示例 2 輸入 2 1 3 5 6 4 7 null 輸出 2 3 6 7 1 5 4 null 解...
SQL每日刷題 變數定義
編寫乙個 sql 查詢,來查詢與之前 昨天的 日期相比溫度更高的所有日期的 id 查詢結果格式如下例 weather id recorddate temperature 1 2015 01 01 10 2 2015 01 02 25 3 2015 01 03 20 4 2015 01 04 30 r...
SQL每日刷題 條件判斷
給定乙個 salary 表,如下所示,有 m 男性 和 f 女性 的值。交換所有的 f 和 m 值 例如,將所有 f 值更改為 m,反之亦然 要求只使用乙個更新 update 語句,並且沒有中間的臨時表。注意,您必只能寫乙個 update 語句,請不要編寫任何 select 語句。例如 idname...