• SQL中的count()函数内加条件


    有需要新做页面统计数据总数,于是就按照条件规矩的分组查询,先查出总数,然后对分组过后的数据进行单个查询。

    于是,在网上搜了一下,count()函数内能不能加条件计数,测试了一下,数据正确,sql如下 :

    SELECT left(date, 4) as semester_year, 
    ifnull(count(type='论文' or null), 0) as '论文数', 
    ifnull(count(type='著作权' or null), 0) as '专著数', 
    ifnull(count(type='专利' or null), 01) as '专利数'
    FROM research_topics_achievements 
    where date is not null 
    GROUP BY left(date, 4)

    测试结果:

    至于为什么条件里要加上 OR NULL,原因如下:

    如count(semester_year = '2016' OR NULL) 这部分为什么要加上 OR NULL  直接count(semester_year ='2006')有什么问题吗?不就是要找semester_year = '2006'的数据吗,为什么要计算NULL的数据?

    因为当 semester_year 不是 2006时 ,semester_year ='2006' 结果false,不是 NULL,Count在值是NULL的时候是不统计个数的,

    (count('任意内容')都会统计出所有记录数,因为count只有在遇见null时不计数,即count(null)==0,

    因此前者单引号内不管输入什么值都会统计出所有记录数)至于加上 OR NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。

    当 semester_year 不为2006时,semester_year = '2006' OR NULL 的结果是NULL,Count才不会统计上这条记录数。

  • 相关阅读:
    二叉树同构
    L1-001 Hello World--java
    关于Hanoi的递归分析
    L1-049 天梯赛座位分配
    1001 害死人不偿命的(3n+1)猜想 && 1005 继续(3n+1)猜想
    L1-046 整除光棍
    L1-043 阅览室
    lambda_Consumer接口
    lambda_Supplier接口
    Veu_v-for
  • 原文地址:https://www.cnblogs.com/liyhbk/p/15507823.html
Copyright © 2020-2023  润新知