sql如何让计算出来的结果百分数显示_图解面试题:如何交换数据?
【題目】
小明是一所學(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)題。
- 上一篇: python个人网站开发_python
- 下一篇: python自动化之文件处理_Pytho