zoukankan      html  css  js  c++  java
  • Group By Count不能显示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,其他数据库未测试

  • 相关阅读:
    24. Swap Nodes in Pairs
    2. Add Two Numbers
    【设计模式】结构型模式
    【设计模式】创建型模式
    【设计模式】初识
    【自考总结】走过的弯路,都是你成长的旅途
    【VMware vSphere】再谈VMware vSphere
    评估网站性能的专业术语
    C/S与B/S之辩
    【VMware vSphere】Veeam备份
  • 原文地址:https://www.cnblogs.com/dusmos/p/5330974.html
Copyright © 2011-2022 走看看