您的位置:首页 > 数据库 > MySQL

MySql含有GROUP BY子句的查询中如何显示COUNT()为0的结果

2017-12-21 17:29 519 查看
前阶段工作中发现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


深入了解:

        http://blog.csdn.net/wei763328075qq/article/details/50956712
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: