首页 > 其他 > 详细

Group By Count不能显示0的问题

时间:2016-03-28 23:22:57      阅读:672      评论:0      收藏:0      [点我收藏+]

问题:

  如对表:

/*====================================================
  id              |score              |grade
  ---------------------------------------------------
  1                |0                  |1
  2                |4                  |1
  3                |6                  |2
  4                |1                  |2
  5                |7                  |3
  6                |3                  |3
  ====================================================*/

   希望统计各grade中score>5的数量

  如果用如下语句:

1 select grade,count(*) from tmpTable where score>5 group by grade

  则不能得到grade==1的结果,但实际是期望得到0的

分析:

  造成这一现象的原因是, score<=5的情况都被首先剔除了,无法被group by

解决:

  使用如下语句查询:

select a.grade,ifnull(count(*),0)
    fromselect * from tmpTable group by grade) a
            left join
            ( select grade,count(*) from tmpTable where score>5 group by grade) b
            on a.grade=b.grade

  原理:

    借助另一个所期待行存在的“表”,通过左联,将期望的行select出来,再借助ifnull函数进行替换 以实现显示0

    注意:不同数据库实现ifnull功能可能采用不同的函数,如NVL等。本例使用的数据库是sqlite,其他数据库未测试

Group By Count不能显示0的问题

原文:http://www.cnblogs.com/dusmos/p/5330974.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!