自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

含有GROUP BY子句的查詢中如何顯示COUNT()為0的結(jié)果

數(shù)據(jù)庫 SQL Server
本文我們主要介紹了SQL Server數(shù)據(jù)庫中在使用GROUP BY對(duì)查詢出的結(jié)果進(jìn)行分組時(shí),COUNT()為0的結(jié)果無法顯示的解決方法,希望能夠?qū)δ兴鶐椭?/div>

SQL Server數(shù)據(jù)庫查詢中,為了對(duì)查詢結(jié)果進(jìn)行對(duì)比、分析,我們經(jīng)常會(huì)用到GROUP BY子句以及COUNT()函數(shù)來對(duì)查詢結(jié)果進(jìn)行分類、統(tǒng)計(jì)等。但是我們在使用的過程中往往會(huì)存在一些問題,本文我們就介紹了一個(gè)問題,并給出了它的解決方案,接下來就讓我們來一起了解一下這部分內(nèi)容吧。

1.問題:

如下ExampleTable表,求各種類(CategoryID)滿足Flag等于1的記錄數(shù)。

ID Flag CategoryID
1 1 1
2 1 1
3 1 2
4 1 2
5 0 3

          表1-ExampleTable 

理想的結(jié)果應(yīng)該如下:

CategoryID TotalNum
1 2
2 2
3 0

表2-理想輸出結(jié)果

初看此問題,我們很容易寫出如下語句:

SELECT CategoryID,COUNT(1) AS TotalNum FROM ExampleTable WHERE flag = 1 GROUP BY CategoryID

可運(yùn)行之后得到的結(jié)果如下:

CategoryID TotalNum
1 2
2 2

表3-錯(cuò)誤輸出結(jié)果

沒有CategoryID=3,TotalNum=0的記錄。

2.原因分析:

造成以上結(jié)果的原因是因?yàn)樵赟ELECT語句中WHERE子句先于GROUP BY執(zhí)行,因此在執(zhí)行GROUP BY子句時(shí),表中的記錄已經(jīng)將Category = 3的記錄過濾,分組處理中自然不會(huì)計(jì)算在內(nèi)。

SQL SELECT語句完整的執(zhí)行順序:

1、FROM子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);

2、WHERE子句基于指定的條件對(duì)記錄進(jìn)行篩選;

3、GROUP BY子句將數(shù)據(jù)劃分為多個(gè)分組;

4、使用聚集函數(shù)進(jìn)行計(jì)算;

5、使用HAVING子句篩選分組;

6、計(jì)算所有表達(dá)式;

7、使用ORDER BY對(duì)結(jié)果進(jìn)行排序。

3.解決方案:

構(gòu)造含有所有CategoeyID的結(jié)果集與其上語句所得結(jié)果集進(jìn)行連接,并利用NULL替換函數(shù)(如SQL SERVER中的ISNULL()、ORACLE中的NVL())將NULL替換為0。

示例語句如下:

 

  1. SELECT DISTINCT MainTable.CategoryID,ISNULL(SubTable.SubNum, 0) AS TotalNum FROM ExampleTable AS MainTable LEFT JOIN  
  2.  
  3. (SELECT CategoryID,COUNT(1) AS SubNum FROM ExampleTable WHERE flag = 1 GROUP BY CategoryID) AS SubTable  
  4.  
  5. ON MainTable.CategoryID = SubTable.CategoryID 

 

執(zhí)行后即可返回正確的結(jié)果:

CategoryID TotalNum
1 2
2 2
3 0

表4-正確輸出結(jié)果

以上就是SQL Server數(shù)據(jù)庫中含有GROUP BY子句的SELECT語句中顯示COUNT()為0的結(jié)果的方法,本文就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. SQL Server 2005數(shù)據(jù)庫nolock使用詳解
  2. SQL Server 2005無法連接到本地服務(wù)器的解決
  3. SQL Server如何查詢當(dāng)前服務(wù)器有多少連接請求
  4. SQL Server通過整理索引碎片和重建索引提高速度
  5. SQL Server 2008安裝無法通過性能計(jì)數(shù)器一致性的解決
責(zé)任編輯:趙鵬 來源: 博客園
相關(guān)推薦

2009-06-12 09:44:04

LINQ查詢復(fù)合from子句

2010-09-09 16:46:06

sql除法DB2

2011-08-04 13:07:59

數(shù)據(jù)庫查詢TOP子句

2021-08-18 08:20:14

SQL除數(shù)統(tǒng)計(jì)

2011-06-16 13:36:01

Top查詢

2010-11-09 14:29:50

SQL SERVER查

2010-04-02 15:04:14

Oracle遞歸查詢

2009-09-16 13:02:12

LINQ查詢子句

2013-12-16 17:17:01

OpenMp數(shù)據(jù)處理

2021-07-13 07:52:03

SQL面試COUNT(*)

2009-05-12 10:55:06

SQLFOR XML模式

2024-07-17 08:15:09

2010-09-26 09:50:36

SQL Where子句

2025-02-04 12:05:10

2010-09-07 11:53:00

SQL語句

2024-02-29 08:52:31

PostgreSQL數(shù)據(jù)分析GROUP BY

2009-08-14 11:35:44

C#數(shù)據(jù)查詢

2024-06-04 00:00:20

數(shù)據(jù)庫

2009-08-27 13:10:54

LINQ from子句

2010-09-10 13:30:49

SQLCOUNT(*)函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)