sql如何让计算出来的结果百分数显示_图解面试题:如何交换数据?
【題目】
小明是一所學校的老師,她有一張 ‘學生表’,平時用來存放座位號和學生的信息。其中,座位號是連續遞增的??偟淖粩凳桥紨怠?/p>
現在,小明想改變相鄰倆學生的座位。你能不能幫她寫一個sql查來輸出想要的結果呢?
示例查詢結果如下:
【解題思路】
第1步:理清換座位的邏輯
查詢目的是改變相鄰學生的座位號。為了理清邏輯,在原表中插入一列叫做‘奇偶數’,對應表示“座位號”的值是“奇數”還是“偶數”。
然后比較原始表里的“座位號”和交換結果里的“座位號”(對比分析方法),可以發現下圖的規律。
1)如果原來座位號是奇數的學生,換座位后,這名學生的座位號變為“座位號+1”。
2)如果原來座位號是偶數的學生,換座位后,這名學生的座位號變為“座位號-1”。
第2步:如何判斷座位號是奇數,還是偶數
sql求余函數:mod(n,m) ,返回n除以m的余數。比如mod(8,2) 的結果是0。
如果n除以2的余數是0,說明n是偶數,否則是奇數。
轉換為判斷奇數,偶數的sql就是:
casewhen mod(座位號, 2) != 0 then '奇數'when mod(座位號, 2) = 0 then '偶數'
end?
把前面的邏輯加入上面這個sql里就是:
1)如果原來座位號是奇數的學生,換座位后,這名學生的座位號變為“座位號+1”
2)如果原來座位號是偶數的學生,換座位后,這名學生的座位號變為“座位號-1”
casewhen mod(座位號, 2) != 0 then 座位號 + 1when mod(座位號, 2) = 0 then 座位號 - 1
end as '交換后座位號'第3步:對查詢結果排序
因為查詢結果里座位號是升序排列的,所以最后還要排序(order by 座位號 asc)。
加入select子句,最終sql如下:
select(casewhen mod(座位號, 2) != 0 then 座位號 + 1when mod(座位號, 2) = 0 then 座位號 - 1end) as '交換后座位號',姓名
from 學生表
order by 座位號 asc;【本題考點】
1.邏輯思維能力,如何使用對比分析方法發現規律
2.條件判斷語句case
3.如何判斷奇數和偶數:mod函數
【舉一反三】
原始座次表 ‘seat’如下,現需要更換相鄰位置學生的座次。
注:該座次表‘seat’共有5名學生,第5個 奇偶性為奇數的學生座次為不變
查詢邏輯和前面一樣,但是座位總數是奇數,所以:如果最后一個座位號也是奇數,那么他沒有可以交換的座位了,所以最后一個座位號的學生不變。
最后一個座位號,等于表里有多少行,可以用count(*) 計算出來
# 最后一個座位號
select count(*) as counts
from seat;最后一個座位號作為條件判斷使用時,可以使用子查詢,以便調用。最終sql如下。
select(case# 當座位號是奇數并且不是不是最后一個座位號時when mod(id, 2) != 0 and counts!= id then id + 1# 當座位號是奇數并且是最后一個座位號時,座位號不變when mod(id, 2) != 0 and counts = id then id# 當座位號是偶數時else id - 1end) as id2,student
from seat,(select count(*) as counts from seat) as b
order by id asc;?推薦:如何從零學會sql?
總結
以上是生活随笔為你收集整理的sql如何让计算出来的结果百分数显示_图解面试题:如何交换数据?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python个人网站开发_python
- 下一篇: 第一帖不知道发在哪里 想问哪些人信本命年