1. 程式人生 > >MySql含有GROUP BY子句的查詢中如何顯示COUNT()為0的結果

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

前階段工作中發現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


版權宣告:本文為博主原創文章,轉載請附上博文連結!