sql不同条件下的cout()或sum()查询

举例说明

从users表里查询性别为男,省份分别为山西的用户数。

  select count(sex = 'man'), count(province = '山西') from users 

此时发现,两个结果相同,并且是数据库总记录的个数。

解决办法

  select count(sex = 'man' OR NULL), count(province = '山西' OR NULL) from users 

理解:

  • sex不是时,sex = 'man'结果为false,并不是NULL
  • 查询结果为false或者truecount都会统计出所有记录数,只有遇到null的情况下才会不计数,count(null) == 0
  • 加上OR NULL,像其他or运算符一样,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false就需要执行or后面的语句 。
  • sex = 'man'时, sex = 'man' or NULL 的结果是NULL,Count才不会统计上这条记录数

使用如:

    SELECT
        DATE_FORMAT( created_at, '%Y-%m' ) AS day,
        biz_user_id AS biz_user_id,
        biz_username AS biz_username,
        COUNT( DISTINCT client_id ),
        count( card_type = 'multi' OR card_type = "single" OR NULL ),
        count( card_type = '1in' OR card_type = '2in' OR NULL ),
        sum( CASE WHEN card_type = 'multi' OR card_type = "single" THEN sharing_price END ),
        sum( CASE WHEN card_type = '1in' OR card_type = '2in' THEN sharing_price END ),
        count( DISTINCT CASE WHEN card_type = 'multi' OR card_type = 'single' THEN pay_user_id END ),
        count( DISTINCT CASE WHEN card_type = '1in' OR card_type = '2in' THEN pay_user_id END ) 
        FROM
            pay_orders 
        WHERE
            state IN ( 'finished', 'refund_pending', 'refund_failed', 'refund_succeed' ) 
            AND created_at >= "2018-01-01 00:00:00" 
            AND created_at <= "2018-10-31 23:59:59" 
        GROUP BY
            day,
            biz_user_id,
            biz_username
        ORDER BY
            DAY,
            biz_user_id,
            biz_username
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,505评论 0 13
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,820评论 0 10
  • 九型诸子:法家∩墨家=坚强的人∪裁判员 文/似或存《九型诸子》 《吕氏春秋·去私》所记载的墨家巨子严格执法,将自己...
    解放者_知乎阅读 780评论 4 5
  • 目标 : 2.10号前额外收入2w元 种子实践: 1.前天给朋友介绍的餐厅,她今天带朋友去了。感谢我介绍那么好的餐...
    jessie娟子阅读 109评论 0 0