共計 1239 個字符,預計需要花費 4 分鐘才能閱讀完成。
含有 GROUP BY 子句的查詢中該怎么顯示,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
在 SQLServer 數據庫查詢中,為了對查詢結果進行對比、分析,我們經常會用到 GROUPBY 子句以及 COUNT()函數來對查詢結果進行分類、統計等。但是我們在使用的過程中往往會存在一些問題。下面丸趣 TV 丸趣 TV 小編來講解下含有 GROUPBY 子句的查詢中如何顯示?
含有 GROUPBY 子句的查詢中如何顯示
1. 問題:
如下 ExampleTable 表,求各種類 (CategoryID) 滿足 Flag 等于 1 的記錄數。
IDFlagCategoryID
111
211
312
412
503
理想的結果應該如下:
CategoryIDTotalNum
12
22
30
初看此問題,我們很容易寫出如下語句:
SELECTCategoryID,COUNT(1)ASTotalNumFROMExampleTableWHEREflag=1GROUPBYCategoryID
可運行之后得到的結果如下:
CategoryIDTotalNum
12
22
沒有 CategoryID=3,TotalNum= 0 的記錄。
含有 GROUPBY 子句的查詢中如何顯示
2. 原因分析:
造成以上結果的原因是因為在 SELECT 語句中 WHERE 子句先于 GROUPBY 執行,因此在執行 GROUPBY 子句時,表中的記錄已經將 Category= 3 的記錄過濾,分組處理中自然不會計算在內。
SQLSELECT 語句完整的執行順序:
1、FROM 子句組裝來自不同數據源的數據;
2、WHERE 子句基于指定的條件對記錄進行篩選;
3、GROUPBY 子句將數據劃分為多個分組;
4、使用聚集函數進行計算;
5、使用 HAVING 子句篩選分組;
6、計算所有表達式;
7、使用 ORDERBY 對結果進行排序。
3. 解決方案:
構造含有所有 CategoeyID 的結果集與其上語句所得結果集進行連接,并利用 NULL 替換函數 (如 SQLSERVER 中的 ISNULL()、ORACLE 中的 NVL()) 將 NULL 替換為 0。
示例語句如下:SELECTDISTINCTMainTable.CategoryID,ISNULL(SubTable.SubNum,0)ASTotalNumFROMExampleTableASMainTableLEFTJOIN(SELECTCategoryID,COUNT(1)ASSubNumFROMExampleTableWHEREflag=1GROUPBYCategoryID)ASSubTableONMainTable.CategoryID=SubTable.CategoryID
執行后即可返回正確的結果:
CategoryIDTotalNum
12
22
30
關于含有 GROUP BY 子句的查詢中該怎么顯示問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注丸趣 TV 行業資訊頻道了解更多相關知識。