MySql含有GROUP BY子句的查询中如何显示COUNT()为0的结果
2017-12-21 17:29
519 查看
前阶段工作中发现MySql含有GROUP BY子句的查询中COUNT()为0的结果不显示.
而针对于分组统计的此类问题,多数人(包括本人)通常会想到:
但是,会出现总数为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。
深入了解:
http://blog.csdn.net/wei763328075qq/article/details/50956712
而针对于分组统计的此类问题,多数人(包括本人)通常会想到:
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
相关文章推荐
- 含有GROUP BY子句的查询中如何显示COUNT()为0的结果
- 含有GROUP BY子句的查询中如何显示COUNT()为0的结果
- 含有GROUP BY子句的查询中如何显示COUNT()为0的结果( SELECT语句完整的执行顺序)
- 含有GROUP BY子句的查询中如何显示COUNT()为0的成果(分享)
- 含有GROUPBY子句的查询中如何显示COUNT()为0的结果
- MySQL中在含有GROUP BY的SELECT语句中显示COUNT()为0的结果
- oracle SQL 如何显示group by 聚合结果count 为0的查询
- 【SQL】在含有GROUP BY的SELECT语句中如何显示COUNT()为0的结果
- 【SQL心得】:在含有GROUP BY的SELECT语句中如何显示COUNT()为0的结果
- mysql中如何将查询结果的多个记录中的指定字段放到一个二维数组中,以及在in子句中使用数组
- MySql如何对聚合函数count()查询的结果再次利用count()统计
- SQL心得:在含有GROUP BY的SELECT语句中显示COUNT()为0的结果
- group by查询语句中显示count(*)为0的结果
- 数据库_MySQL_SQL语句的组装顺序 和 GROUP BY的SELECT语句中显示COUNT()为0的结果
- 如何实现 MySQL 查询结合多个的 count () 和 GROUP BY
- MYSQL如何进行sql like (sql查询结果)的查询
- 【数据库-MySql】按时间间隔分组查询 group by count(*) date_format
- mysql查询结果中文显示成了问号
- mysql 外联的where子句不同位置显示的结果
- ABAP--如何将查询结果显示在选择屏幕上的代码