好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 關于SQL的幾道小題詳解(sql進階)

關于SQL的幾道小題詳解(sql進階)

熱門標簽:廣州人工電銷機器人費用 如何在地圖標注自己店鋪 怎樣把地圖標注導入公司地址 地圖標注一個圓圈怎么用 電銷機器人被曝光 400外呼系統合法 洛陽外呼系統平臺 寧波人工外呼系統有效果嗎 真人語音電銷機器人

當我們拿到題目的時候,并不是急于作答,那樣會得不償失的,而是分析思路,采用什么方法,達到什么目的,還要思考有沒有簡單的方法或者通用的方法等等,這樣才會達到以一當十的效果,這樣的慣性思維其實早在我們度高中的時候就被領教了,所謂“萬變不離其宗”吧。以下各題來自日常所見,或QQ群,或面試題,或博客園。

題目一:如下表所示,現需要按照收款員統計收款和退款合計金額。

實現結果需如下顯示:

分析:想要的結果(記為表B)和源數據(記為表A)相比,有共同的列(收款員),不同的是表A的金額根據標記和收款員分成了兩列,所以這個需求可以用語言表述一下:首先根據收款員分組(group by),然后當標記為“收”時,金額計入收款合計(sum);當標記為“退”時,金額計入退款合計(sum)。當……時……,這不就是SQL的條件判斷嘛?盤點SQL的條件語句不多,if……else……和case……when……then……else……end。這樣問題就迎刃而解了。

解決方案如下:

with ta as
(select '收' as 標記,'100' as 收款員,150 as 金額
 union
 select '收','100',375
 union
 select '退','100',78
 union select '收','200',74
)

select 收款員,sum(case when 標記='收' then 金額 else 0 end) as 收款合計,
 sum(case when 標記='退' then 金額 else 0 end) as 退款合計 from ta
 group by 收款員

題目二:如下表A(左邊)職員信息表,其中ID為職員工號,name為職員姓名;表B(右邊)為職員任務分配表,其中ID為職員工號(和表A中ID對應),Task為任務編號。

現需求每個職員的任務數。結果如下顯示:

其實原題是這樣的:只有一張表B,求求每個職員的任務數。沒有找到比較好的方法實現,不做討論,歡迎高人指點。

分析:此題的難點在于表B中的ID復雜表示,其實這樣有悖于數據庫的設計原則,理應表A和表B的ID一一對應。既然是題,我們只能從當前的條件入手了,攻破難點的關鍵在于判斷A中ID在B中ID出現與否,如果出現那么如何統計出現的次數。判斷出現與否需要用到函數CHARINDEX。

解決方案如下:

--創建測試數據
WITH TA
AS
(SELECT '1,2' AS ID,'job1' AS task
UNION SELECT '1,2,3','job3'
UNION SELECT '2,3','job2'
UNION SELECT '3,4,5','job4')
,TB AS 
(SELECT '1' AS ID,'張三' as name
UNION SELECT '2','王二'
UNION SELECT '3','李四'
UNION SELECT '4','李明'
UNION SELECT '5','王五')

SELECT B.ID,B.name,COUNT(1) AS TASKS
 FROM TA A,TB B
 WHERE CHARINDEX(B.ID,A.ID)>0
 GROUP BY B.ID,B.name
 order by B.ID

題目三:原題參見這篇文章:https://www.jb51.net/article/67885.htm

如下表City所示,code為行政區域碼(六位數字,前兩代表省級,中間兩位代表市級,最后兩位代表縣級,不考慮xx00xx情況),city為城市名稱,CCode為該城市所屬的省級或者市級行政區域碼。

現需求如下結果:

分析:分析表city,code的含義十分明顯,所需要的結果也很明顯,如果是省就是顯示省份;是市則顯示為所屬省級+市級;是縣級則顯示為所屬省級+所屬市級+縣級。貌似可以用題目一分析中提到的SQL條件語句實現,但是轉念一想,還是有差別,這里需要先判斷city屬于省級?市級?縣級?然后在對應起來的,這樣還得有參照表,復雜了。回到結果表中來進行分析,其實判定city屬于省市縣的問題并不難,code的含義已經說明了,只要轉換表述:在表City中,當code的后四位為“0000”時,肯定是省級;當code的后兩位為“00”,并且后四位不為“0000”時,肯定是市級;當code后兩位不為“00”時,為縣級。這樣省市縣的判定就一目了然了,然后,根據市級編碼追朔所屬的省級,并得出所屬省級+市級,縣級追朔所屬的市級,得出所屬省級+所屬市級+所屬縣級,通過運用這種簡單的遞歸思想,解決方案便躍然紙上了。

解決方案如下:

--測試數據
with ta as
(select '110000' as code, '北京市' city, '110000' Ccode
union
select N'110200', N'西城區', N'110200'
union
select N'110300', N'崇文區', N'110300'
union
select N'430000', N'湖南省', N'430000'
union
select N'430100', N'長沙市', N'430100'
union
select N'430101', N'望城縣', N'430100')

select * into City from ta

select * from City;

--解決方案
with ta
as(
--省級
select code,city,Ccode,city content from City where right(code,4)='0000'),
tb as(
--市級
select b.code,b.city,b.Ccode,a.city+','+b.city as content from ta a,City b where left(a.Ccode,2)=left(b.Ccode,2)
and right(b.code,2)='00' and right(b.code,4)>'0000'),
tc as(
select c.code,c.city,c.Ccode,b.content+','+c.city content from tb b,City c where left(b.Ccode,4)=left(c.Ccode,4)
and right(c.code,2)>'00')
select * from ta
union
select * from tb
union
select * from tc

通過上述幾道小題,常思常新,溫故了SQL的部分知識,當然方法很多,變式很多,如題目二統計表B中每個Task的人數等。不足之處,歡迎各位指點!

標簽:煙臺 東營 珠海 南昌 咸寧 石家莊 晉中 北海

巨人網絡通訊聲明:本文標題《關于SQL的幾道小題詳解(sql進階)》,本文關鍵詞  關于,SQL,的,幾道,小題,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《關于SQL的幾道小題詳解(sql進階)》相關的同類信息!
  • 本頁收集關于關于SQL的幾道小題詳解(sql進階)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 粗大凶猛h胯下男男| 虞城县| 国精产品2023偷拍偷拍| 国产精品亚洲AV色欲三区不卡| 女人被强行扒开双腿蹂躏| 97精品福利一区二区三区在线| 香港三级纶理在线播放| 国产精品扒开腿做爽爽爽视频| 国产91福利| 91在线无码精品秘?入口男同| 亚洲va欧洲va欧美va在线观看 | 3p双龙一女三根一起进| 从后面揉着岳的双乳| 亚洲精品一二三区-久久| 漂亮的岳母在线观看| gogo全球大胆高清人体444| 美女裸体无遮挡奶头免费网站| 亚洲区小说区图片区qvod| 国产女学生小嫩嫩的毛A片| 东北大坑肉体乱| 国产999精品久久久影片软件功能| 俄罗斯大肥女| 迈开腿让我看下你的小莓| 国产?精品?无码?下载| 黑人巨大怪物吊| 夜夜艹日日艹| 国产精品久久久免费观看| 精品69久久久久久99| 国产一级做a爱片久久片| 日韩专区视频| ass日本乱妇ass| yw.193.爆乳尤物.ccm| ass中国肥女pⅰcs| 精品a视频| 爽死你个放荡小婬妇h文| 男人插女人的下面| 91啪在线| 婚心荡漾前夫太凶猛免费阅读| 成人看片黄a免费看视频| 5x社区-5x在视频5xSQ| 免费一级黄色电影|