含有GROUP BY子句的查詢中如何顯示COUNT()為0的結果( SELECT語句完整的執行順序)
含有GROUP BY子句的查詢中如何顯示COUNT()為0的結果
本文我們主要介紹了SQL Server資料庫中在使用GROUP BY對查詢出的結果進行分組時,COUNT()為0的結果無法顯示的解決方法,希望能夠對您有所幫助。
在SQL Server資料庫查詢中,為了對查詢結果進行對比、分析,我們經常會用到GROUP BY子句以及COUNT()函式來對查詢結果進行分類、統計等。但是我們在使用的過程中往往會存在一些問題,本文我們就介紹了一個問題,並給出了它的解決方案,接下來就讓我們來一起了解一下這部分內容吧。
1.問題:
如下ExampleTable表,求各種類(CategoryID)滿足Flag等於1的記錄數。
ID | Flag | CategoryID |
1 | 1 | 1 |
2 | 1 | 1 |
3 | 1 | 2 |
4 | 1 | 2 |
5 | 0 | 3 |
表1-ExampleTable
理想的結果應該如下:
CategoryID | TotalNum |
1 | 2 |
2 | 2 |
3 | 0 |
表2-理想輸出結果
初看此問題,我們很容易寫出如下語句:
SELECT CategoryID,COUNT(1) AS TotalNum FROM ExampleTable WHERE flag = 1 GROUP BY CategoryID
可執行之後得到的結果如下:
CategoryID | TotalNum |
1 | 2 |
2 | 2 |
表3-錯誤輸出結果
沒有CategoryID=3,TotalNum=0的記錄。
2.原因分析:
造成以上結果的原因是因為在SELECT語句中WHERE子句先於GROUP BY執行,因此在執行GROUP BY子句時,表中的記錄已經將Category = 3的記錄過濾,分組處理中自然不會計算在內。
SQL SELECT語句完整的執行順序:
1、FROM子句組裝來自不同資料來源的資料;
2、WHERE子句基於指定的條件對記錄進行篩選;
3、GROUP BY子句將資料劃分為多個分組;
4、使用聚集函式進行計算;
5、使用HAVING子句篩選分組;
6、計算所有表示式;
7、使用ORDER BY對結果進行排序。
3.解決方案:
構造含有所有CategoeyID的結果集與其上語句所得結果集進行連線,並利用NULL替換函式(如SQL SERVER中的ISNULL()、ORACLE中的NVL())將NULL替換為0。
示例語句如下:
- SELECT DISTINCT MainTable.CategoryID,ISNULL(SubTable.SubNum, 0) AS TotalNum FROM ExampleTable AS MainTable LEFT JOIN
- (SELECT CategoryID,COUNT(1) AS SubNum FROM ExampleTable WHERE flag = 1 GROUP BY CategoryID) AS SubTable
- ON MainTable.CategoryID = SubTable.CategoryID
執行後即可返回正確的結果:
CategoryID | TotalNum |
1 | 2 |
2 | 2 |
3 | 0 |
表4-正確輸出結果
以上就是SQL Server資料庫中含有GROUP BY子句的SELECT語句中顯示COUNT()為0的結果的方法,本文就介紹到這裡了,希望本次的介紹能夠對您有所收穫!
相關推薦
含有GROUP BY子句的查詢中如何顯示COUNT()為0的結果( SELECT語句完整的執行順序)
含有GROUP BY子句的查詢中如何顯示COUNT()為0的結果 本文我們主要介紹了SQL Server資料庫中在使用GROUP BY對查詢出的結果進行分組時,COUNT()為0的結果無法顯示的解決方法,希望能夠對您有所幫助。 在SQL Server資料庫查詢中,為
MySql含有GROUP BY子句的查詢中如何顯示COUNT()為0的結果
前階段工作中發現MySql含有GROUP BY子句的查詢中COUNT()為0的結果不顯示. 而針對於分組統計的此類問題,多數人(包括本人)通常會想到: SELECT PID,COUNT(1) AS SUM FROM SS WHERE FIAG = 1 GROUP BY PID
Mysql5.7版本group by 子查詢中order by 無效的問題解決辦法
我們都知道group by 會選擇保留第一條資料,預設是按照id排序的,如果我們想通過別的欄位排序,比如最後建立的那條記錄,可以先按照建立時間降序,再group by即可得到每個分組的最新建立的資料。 例: 通過如下sql查出兩條資料 SELECT * FROM xxx WHERE gr
儲存過程使用sum()、count()提供因為該列沒有包含在聚合函式或 GROUP BY 子句中
SELECT top 10 *, 5 totalPaidTimes, logID id, sum(paidMoney) totalPaidMoney, CONVERT(varchar(100), addTime, 120) addTimeForma
group by子句中使用rollup和cube操作符
在實際應用中,利用group by 分組後可能還需要取得橫向和縱向的小計統計以及總計統計。 1、使用rollup操作符時,在保留原有的統計結果的同時,還會生成橫向小計、總計。 SELECT e.deptno,e.job,sum(e.sal),avg(sal) FROM emp e GROUP BY
在entity framework 中使用 LINQ 對錶進行左關聯查詢且group by 分組查詢的示例,並且按小時分組查詢時間段
有表RealTimeDatas的欄位RecordTime儲存了實時時間,格式為DateTime 現在需要以小時進行分組統計每個時間段的最大值,最小值,和平均值 同時,另一個表Devices中有標準溫度溼度最大最小值範圍,需要將這個結果一併關聯到查詢結果中
sql語句中GROUP BY 和 HAVING的使用 count()
在介紹GROUP BY 和 HAVING 子句前,我們必需先講講sql語言中一種特殊的函式:聚合函式, 例如SUM, COUNT, MAX, AVG等。這些函式和其它函式的根本區別就是它們一般作用在多條記錄上。 SELECT SUM(population) FROM bbc
SQL---該列沒有包含在聚合函式或 GROUP BY 子句中
解決方式有2種: from語句中子查詢 根據路測ATU資料表,查詢服務小區參考訊號接收功率RSRP的均值大於-70的小區。 select cellid, avg_rsrp from
Group by 分組查詢 實戰
男女 img 通過 ont rom 出現的次數 是我 實現 一起 實戰經歷,由於本人在共享單車上班,我們的單車管理模塊,可以根據單車號查詢單車,但是單車號沒有設置unique(獨一無二約束),說以這就增加了單車號可能重復的風險,但是一般情況下,單車號是不會重復的,因為平
【15】group by子句與聚合函數
字段 min sum count() span bsp 學生 空值 查詢 1.group by簡介 -> 使用group by子句可以將數據分組-> 語法group by 字段-> 註意-> 查詢中只允許出現分組的字段或聚合函數-> 分組查詢中
MySQL Crash Course #06# Chapter 13. 14 GROUP BY. 子查詢
idt rom pla most con height bsp them 找到 索引 理解 GROUP BY 過濾數據 vs. 過濾分組 GROUP BY 與 ORDER BY 之不成文的規定 子查詢 vs. 聯表查詢 相關子查詢和不相關子查詢. 增量構造復雜
SQL group by分組查詢
create server insert 一定的 ID all 註意 至少 滿足 本文導讀:在實際SQL應用中,經常需要進行分組聚合,即將查詢對象按一定條件分組,然後對每一個組進行聚合分析。創建分組是通過GROUP BY子句實現的。與WHERE子句不同,GROUP BY
關於group by子句使用的注意事項
1、select empno,avg(sal) from emp where avg(sal)>8000 group by empno; 會報錯誤:ORA-00934: 此處不允許使用分組函式 解決
分組函式group by和Oracle中分析函式partition by的用法以及區別
今天有個同事給我打電話問我題目列出的這個問題,在日常開發中,確實它們倆都是與分組有關的,但是需要注意的是一個是分組函式另一個是分析函式,講解用到的表就以Oracle中schema的scott的EMP表和DEPT表為例做講解: 老總下命令說:需要統
sql GROUP BY子句使用例項
GROUP BY子句 GROUP BY子句可以將表的行劃分為不同的組。分別總結每個組,這樣就可以控制想要看見的詳細資訊的級別。語法: [ GROUP BY [ ALL ] group_by_expression[ ,...n ] [ WITH { CUBE | ROLLU
sqlite3學習之Limit 子句&ORDER BY 子句& GROUP BY 子句
SQLite 的 LIMIT 子句用於限制由 SELECT 語句返回的資料數量,我們來看下帶有 LIMIT 子句的 SELECT 語句的基本語法: SELECT column1, column2, columnN FROM table_name LIMIT [no of rows] 再
GROUP BY 條件查詢最新時間記錄
概述: 最近專案一個查詢需求是從一個表中同一個IP多條記錄的只獲取一條IP記錄,而這條IP記錄要最新的。很明顯需求沒什麼難,分組當然想到的是group by,但是這裡是有個時間條件篩選的。雖然網上很多答案,但是我發現實際操作上是沒有生效的,不知道是MYSQ
去除GridControl上面"Drag a column header here to group by that column"的顯示
1、開啟Run Designer,選擇Views2、在右側選擇options,並找到OptionsViews,單擊展開選項3、選擇ShowGroupPanel,修改其屬性為false即可關於如何修改表頭內容,請見我的另一篇博文:修改表頭內容
Java Dao實現group by 分組查詢功能
前言 今天要實現一個功能,去資料庫查詢一個欄位,查出該欄位有幾個不同的值,以及每個值有多少條記錄。我想到的是group by分組查詢功能,以前雖然學習過,但是沒具體去實踐,沒想到今天實現過程中糾結了很久,我把遇見的問題記錄下來供參考 實現效果 實現
資料庫排名sql,group by 分組查詢按照時間最大值
先給出類似的簡單表 DROP TABLE IF EXISTS `TouTiaoAnchor`; CREATE TABLE `TouTiaoAnchor` ( `HourId` int(10) unsigned NOT NULL, `BetinTime` varcha