SQL每日刷題 異或 交換奇偶

2021-10-17 09:25:38 字數 1935 閱讀 8550

小美是一所中學的資訊科技老師,她有一張 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...