日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

sql如何让计算出来的结果百分数显示_图解面试题:如何交换数据?

發(fā)布時(shí)間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql如何让计算出来的结果百分数显示_图解面试题:如何交换数据? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【題目】

小明是一所學(xué)校的老師,她有一張 ‘學(xué)生表’,平時(shí)用來(lái)存放座位號(hào)和學(xué)生的信息。其中,座位號(hào)是連續(xù)遞增的。總的座位數(shù)是偶數(shù)。

現(xiàn)在,小明想改變相鄰倆學(xué)生的座位。你能不能幫她寫一個(gè)sql查來(lái)輸出想要的結(jié)果呢?

示例查詢結(jié)果如下:

【解題思路】

第1步:理清換座位的邏輯

查詢目的是改變相鄰學(xué)生的座位號(hào)。為了理清邏輯,在原表中插入一列叫做‘奇偶數(shù)’,對(duì)應(yīng)表示“座位號(hào)”的值是“奇數(shù)”還是“偶數(shù)”。

然后比較原始表里的“座位號(hào)”和交換結(jié)果里的“座位號(hào)”(對(duì)比分析方法),可以發(fā)現(xiàn)下圖的規(guī)律。

1)如果原來(lái)座位號(hào)是奇數(shù)的學(xué)生,換座位后,這名學(xué)生的座位號(hào)變?yōu)椤白惶?hào)+1”

2)如果原來(lái)座位號(hào)是偶數(shù)的學(xué)生,換座位后,這名學(xué)生的座位號(hào)變?yōu)椤白惶?hào)-1”

第2步:如何判斷座位號(hào)是奇數(shù),還是偶數(shù)

sql求余函數(shù):mod(n,m) ,返回n除以m的余數(shù)。比如mod(8,2) 的結(jié)果是0。

如果n除以2的余數(shù)是0,說(shuō)明n是偶數(shù),否則是奇數(shù)。

轉(zhuǎn)換為判斷奇數(shù),偶數(shù)的sql就是:

casewhen mod(座位號(hào), 2) != 0  then  '奇數(shù)'when mod(座位號(hào), 2)  = 0  then  '偶數(shù)'
end

?

把前面的邏輯加入上面這個(gè)sql里就是:

1)如果原來(lái)座位號(hào)是奇數(shù)的學(xué)生,換座位后,這名學(xué)生的座位號(hào)變?yōu)椤白惶?hào)+1”

2)如果原來(lái)座位號(hào)是偶數(shù)的學(xué)生,換座位后,這名學(xué)生的座位號(hào)變?yōu)椤白惶?hào)-1”

casewhen mod(座位號(hào), 2) != 0  then 座位號(hào) + 1when mod(座位號(hào), 2)  = 0  then 座位號(hào) - 1
end  as  '交換后座位號(hào)'

第3步:對(duì)查詢結(jié)果排序

因?yàn)椴樵兘Y(jié)果里座位號(hào)是升序排列的,所以最后還要排序(order by 座位號(hào) asc)。

加入select子句,最終sql如下:

select(casewhen mod(座位號(hào), 2) != 0  then 座位號(hào) + 1when mod(座位號(hào), 2)  = 0  then 座位號(hào) - 1end)  as  '交換后座位號(hào)',姓名
from 學(xué)生表
order by 座位號(hào) asc;

【本題考點(diǎn)】

1.邏輯思維能力,如何使用對(duì)比分析方法發(fā)現(xiàn)規(guī)律

2.條件判斷語(yǔ)句case

3.如何判斷奇數(shù)和偶數(shù):mod函數(shù)

【舉一反三】

原始座次表 ‘seat’如下,現(xiàn)需要更換相鄰位置學(xué)生的座次。

注:該座次表‘seat’共有5名學(xué)生,第5個(gè) 奇偶性為奇數(shù)的學(xué)生座次為不變

查詢邏輯和前面一樣,但是座位總數(shù)是奇數(shù),所以:如果最后一個(gè)座位號(hào)也是奇數(shù),那么他沒有可以交換的座位了,所以最后一個(gè)座位號(hào)的學(xué)生不變。

最后一個(gè)座位號(hào),等于表里有多少行,可以用count(*) 計(jì)算出來(lái)

# 最后一個(gè)座位號(hào)
select count(*) as counts 
from seat;

最后一個(gè)座位號(hào)作為條件判斷使用時(shí),可以使用子查詢,以便調(diào)用。最終sql如下。

select(case# 當(dāng)座位號(hào)是奇數(shù)并且不是不是最后一個(gè)座位號(hào)時(shí)when mod(id, 2) != 0 and counts!= id then id + 1# 當(dāng)座位號(hào)是奇數(shù)并且是最后一個(gè)座位號(hào)時(shí),座位號(hào)不變when mod(id, 2) != 0 and counts = id then id# 當(dāng)座位號(hào)是偶數(shù)時(shí)else id - 1end) as id2,student
from seat,(select count(*) as counts from seat) as b
order by id asc;?

推薦:如何從零學(xué)會(huì)sql?

總結(jié)

以上是生活随笔為你收集整理的sql如何让计算出来的结果百分数显示_图解面试题:如何交换数据?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。