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
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/84663131