MySQL學習之 如何交換相鄰資料

2021-10-09 21:29:36 字數 2021 閱讀 9687

模擬換座位。換座位存在如下的規則:如果總座位號是偶數的時候,奇數號碼的加一,偶數號碼的減一;如果總座位數是奇數的時候,最後乙個號碼不變。

使用建表語句:

create

table

`student`

(`id`

int(11)

unsigned

notnull

auto_increment

,`name`

varchar(20

)default

null

,primary

key(

`id`))

engine

=innodb

auto_increment=6

default

charset

=utf8

插入資料之後:

insert

into student(id,name)

values(1

,'lucy');

insert

into student(id,name)

values(2

,'mike');

insert

into student(id,name)

values(3

,'jane');

insert

into student(id,name)

values(1

,'jack');

insert

into student(id,name)

values(1

,'rose'

);

查詢語句如下:

select

(case

# 當座位號是奇數並且不是不是最後乙個座位號時

when

mod(id,2)

!=0and s2.counts!= id then id +

1# 當座位號是奇數並且是最後乙個座位號時,座位號不變

when

mod(id,2)

!=0and s2.counts = id then id

# 當座位號是偶數時

else id -

1end

)as id2,name

from student,

(select

count(*

)as counts from student)

as s2 order

by id2;

一定要有order by,不然結果不是你想要的答案。

輸出結果:

需要特別注意的是:

這個時候資料庫裡面的資料並沒有改變,只是顯示的時候,按照我們想要的格式進行了顯示,這個就是select語句的特點。

這個時候:

select * from student

結果還是:

怎麼說呢?

就是如果沒有order by的話,其實name的順序是沒有改變的,還是

這是因為我們在select語句裡面改變的是id的順序,並沒有改變name的展示順序,而這個時候加入乙個order by id2,就會讓上述結果按照id2的順序公升序排序,name的展示順序隨著id2的順序的改變而改變(當然也就剛好實現了我們需要的交換相鄰的資料的順序(關鍵是看name的順序)的效果了),但是實際上,資料庫中的順序沒有改變。

貪心策略 相鄰交換 學習筆記

題解主要寫貪心的考慮方法 相鄰交換法。我們在平時的貪心題幾乎都可以正確的貪心方法。設交換前對答案的貢獻為x,交換後對答案的貢獻為y l 若x y則不交換 l 若xl 若x y則不交換 交換反而增加時間複雜度 作為題目,需要建立數學模型設定未知數表示x和y得到不等式從而得出排序的關鍵字 題目大意 給出...

MySQL之如何系統學習 MySQL

size medium b 如何系統學習 mysql?b size 我的問題 如何 系統 學習mysql?比如需要看哪些書籍,哪些資料?我曾研讀過以下幾本書 高效能mysql 簡朝陽的mysql優化,innodb儲存引擎。我個人感覺前兩本是告訴讀者知其然,第三本是告訴讀者所以然。這三本書是有一種漸進...

學習隨記六 單鏈表與雙鏈表交換相鄰結點比較

單鏈表結點結構體 typedef struct listnode1listnode1 雙鏈表結點結構體 typedef struct listnode2listnode2 單鏈表交換相鄰結點 必要操作是需要中間指標儲存指向關係,模擬用temp來交換兩個數 注意要有個頭指標來返回交換後的頭位址 lis...