MySql含有GROUP BY子句的查詢中如何顯示COUNT()為0的結果
阿新 • • 發佈:2018-12-14
前階段工作中發現MySql含有GROUP BY子句的查詢中COUNT()為0的結果不顯示.
而針對於分組統計的此類問題,多數人(包括本人)通常會想到:
SELECT PID,COUNT(1) AS SUM FROM SS WHERE FIAG = 1 GROUP BY PID
但是,會出現總數為0的不在統計之列.原因是因為在SELECT語句中WHERE子句先於GROUP BY執行,因此在執行GROUP BY子句時,表中的記錄已經被過濾.
SQL SELECT語句完整的執行順序:
1、FROM子句組裝來自不同資料來源的資料;
2、WHERE子句基於指定的條件對記錄進行篩選;
3、GROUP BY子句將資料劃分為多個分組;
4、使用聚集函式進行計算;
5、使用HAVING子句篩選分組;
6、計算所有表示式;
7、使用ORDER BY對結果進行排序。
解決方案:
構造含有所有PID的結果集與其上述語句所得結果集進行左連線,並利用IFNULL()替換函式(如SQL SERVER中的ISNULL()、ORACLE中的NVL())將NULL替換為0。
SELECT DISTINCT m.PID,IFNULL(s.sum, 0) AS SUM FROM SS AS m
LEFT JOIN
(SELECT PID,COUNT(1) AS sum FROM SS WHERE FIAG = 1 GROUP BY PID) AS s
ON m.PID = s.PID
作者:看得見的等候
來源:CSDN
原文:https://blog.csdn.net/qq_39028580/article/details/78865907
版權宣告:本文為博主原創文章,轉載請附上博文連結!