今天給大家介紹一下SQL怎么查詢每個分組都出現的字段值。文章的內容小編覺得不錯,現在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。
成都創新互聯公司長期為近1000家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為宣城企業提供專業的成都做網站、成都網站建設,宣城網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發。
數據分組以后,要找出在每個分組中都出現的某個字段值。
用SQL來解決這個問題并不容易!
SQL缺少單純的分組操作,只能返回各分組的統計值,而不能對各組的成員再進行更細的交、差、并等集合運算。要解決這種問題就需要多層嵌套子查詢來變相地實現。
舉個例子:查詢每周都加班的員工以進行表彰。現有加班數據表OVERTIME_WORK數據如下:
WORKDATE | NAME |
2019-07-01 | Tom |
2019-07-02 | John |
2019-07-03 | Tom |
2019-07-04 | Cart |
2019-07-08 | Tom |
2019-07-09 | Jordan |
2019-07-10 | Kate |
2019-07-10 | John |
2019-07-15 | Leon |
2019-07-16 | John |
2019-07-17 | Tom |
2019-07-18 | John |
2019-07-22 | Jim |
2019-07-23 | Tom |
2019-07-24 | John |
2019-07-25 | Cart |
… | … |
以Oracle為例,用SQL寫出來是這樣:
WITH A AS
(SELECT COUNT(*) NUM FROM
(SELECT DISTINCT TO_CHAR(WORKDATE,'IW') FROM OVERTIME_WORK )
),
B AS
(SELECT TO_CHAR(WORKDATE,'IW') W, NAME
FROM OVERTIME_WORK
GROUP BY TO_CHAR(WORKDATE,'IW'), NAME
),
C AS
(SELECT NAME, COUNT(*) NUM FROM B GROUP BY NAME )
SELECT NAME FROM C WHERE NUM=(SELECT NUM FROM A);
這里的A查出共有幾周,B查出每周加班的不同員工,C查出B里各員工的出現次數,最后從C里選出出現次數與總周數相等的員工。解決思路比較繞,這種SQL既難寫又難懂。
集算器的SPL語言支持集合運算,解決這個問題就會簡單很多,計算出每周加班員工的交集即可,只需1行代碼:
connect("mydb").query("SELECT * FROM OVERTIME_WORK").group((WORKDATE-date("2019-07-01"))\7).(~.(NAME)).isect()
以上就是SQL怎么查詢每個分組都出現的字段值的全部內容了,更多與SQL怎么查詢每個分組都出現的字段值相關的內容可以搜索創新互聯之前的文章或者瀏覽下面的文章進行學習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下創新互聯!
網站題目:SQL怎么查詢每個分組都出現的字段值
鏈接地址:http://m.newbst.com/article0/iideoo.html
成都網站建設公司_創新互聯,為您提供手機網站建設、營銷型網站建設、建站公司、ChatGPT、搜索引擎優化、App設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯