精华内容
下载资源
问答
  • Mysql中使用count条件统计

    万次阅读 多人点赞 2019-06-02 10:34:26
    最近发现在处理Mysql问题时,count()函数频繁上镜,常常出现在分组统计的情景下,但是有时候并不是使用group by分好组就可以直接统计了,比如说一个常见的需求,统计每个班级男生所占的比例,这种情况一般会按照班级...

    前言

    最近发现在处理Mysql问题时,count()函数频繁上镜,常常出现在分组统计的情景下,但是有时候并不是使用group by分好组就可以直接统计了,比如说一个常见的需求,统计每个班级男生所占的比例,这种情况一般会按照班级分组,但是分组内不但要统计班级的人数,还要统计男生的人数,也就是说统计是有条件的,之前确实没有考虑过怎样实心,后来查询了资料,总结在这里,方便日后查找使用。

    Mysql中count()函数的一般用法是统计字段非空的记录数,所以可以利用这个特点来进行条件统计,注意这里如果字段是NULL就不会统计,但是false是会被统计到的,记住这一点,我们接下来看看几种常见的条件统计写法。

    测试环境

    Windows 10
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 7
    Server version: 5.7.21-log MySQL Community Server (GPL)
    Copyright © 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
    Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

    准备工作

    1. 新建一个Mysql数据表a,包含idnum两个字段
    mysql> create table a(id int, num int);
    Query OK, 0 rows affected (0.04 sec)
    
    1. 插入测试数据,为了看count()函数的效果,我们插入两个空数据
    mysql> insert into a values (1,100),(2,200),(3,300),(4,300),(8,null),(9,null);
    Query OK, 6 rows affected (0.01 sec)
    Records: 6  Duplicates: 0  Warnings: 0
    
    1. 查询表a中的数据,与后面的统计做比较
    mysql> select * from a;
    +----+------+
    | id | num  |
    +----+------+
    |  1 |  100 |
    |  2 |  200 |
    |  3 |  300 |
    |  4 |  300 |
    |  8 | NULL |
    |  9 | NULL |
    +----+------+
    6 rows in set (0.09 sec)
    
    1. 调用count()函数看效果,如果使用count(*)会查询出所有的记录数,但如果使用count(num)发现只有4条数据,numNULL的记录并没有统计上
    mysql> select count(*) from a;
    +----------+
    | count(*) |
    +----------+
    |        6 |
    +----------+
    1 row in set (0.03 sec)
    
    mysql> select count(num) from a;
    +------------+
    | count(num) |
    +------------+
    |          4 |
    +------------+
    1 row in set (0.04 sec)
    

    条件统计

    1. count()函数中使用条件表达式加or null来实现,作用就是当条件不满足时,函数变成了count(null)不会统计数量
    mysql> select count(num > 200 or null) from a;
    +--------------------------+
    | count(num > 200 or null) |
    +--------------------------+
    |                        2 |
    +--------------------------+
    1 row in set (0.22 sec)
    
    1. count()函数中使用if表达式来实现,当条件满足是表达式的值为非空,条件不满足时表达式值为NULL;
    mysql> select count(if(num > 200, 1, null)) from a;
    +-------------------------------+
    | count(if(num > 200, 1, null)) |
    +-------------------------------+
    |                             2 |
    +-------------------------------+
    1 row in set (0.05 sec)
    
    1. count()函数中使用case when表达式来实现,当条件满足是表达式的结果为非空,条件不满足时无结果默认为NULL;
    mysql> select count(case when num > 200 then 1 end) from a;
    +---------------------------------------+
    | count(case when num > 200 then 1 end) |
    +---------------------------------------+
    |                                     2 |
    +---------------------------------------+
    1 row in set (0.07 sec)
    

    总结

    使用count()函数实现条件统计的基础是对于值为NULL的记录不计数,常用的有以下三种方式,假设统计num大于200的记录

    1. select count(num > 200 or null) from a;
    2. select count(if(num > 200, 1, null)) from a
    3. select count(case when num > 200 then 1 end) from a
    展开全文
  • sql分组统计查询 count条件

    万次阅读 2017-06-20 10:43:09
    sql分组统计查询 count带条件// count括号里带统计条件 SELECT user_id,count(type=1 or null) donate_num,count(type=2 or null) rent_num FROM ot_dynamic GROUP BY user_id

    sql分组统计查询 count带条件

    // count括号里带统计条件
    
    SELECT user_id,count(type=1 or null) donate_num,count(type=2 or null) rent_num
    FROM ot_dynamic  
    GROUP BY user_id
    




    展开全文
  • COUNT(1) FROM 表 WHERE IS_VALID = 0 2: COUNT( CASE IS_VALID WHEN 0 THEN CASE INVALID_CAUSE WHEN 1 THEN 1 ELSE NULL END ELSE NULL END) 实例: 计算出...

    错误写法:

    select count(sc.score>6) from stu_score sc
    

    1:使用最普遍的 where 条件
    COUNT(1) FROM 表 WHERE IS_VALID = 0

    2:使用 cse when

    • case when XX then XX else XX end;
    • case XX when XX then XX when XX then xx else XX end;
     COUNT(
     	CASE 
     		IS_VALID 
     	WHEN 0 
     	THEN 
     			CASE 
     				INVALID_CAUSE 
     			WHEN 1 
     			THEN 1 
     			ELSE NULL 
     			END 
     	ELSE NULL 
     	END) 
    

    3: 使用 decode
    计算出1980,1981,1982三年入职的员工总人数和每年入职人数.

    select count(empno) total,
    count(decode(to_char(HIREDATE,'yyyy'),'1980',1,null)) "1980",
    count(decode(to_char(HIREDATE,'yyyy'),'1981',1,null)) "1981",
    count(decode(to_char(HIREDATE,'yyyy'),'1982',1,null)) "1982"
    from emp 
    where to_char(HIREDATE,'yyyy') in ('1980','1981','1982'
    

    4: 使用 sum 与 case when

    select sum(case when t.command_name = 'UNLOCK' then 1 else 0 end)) from t
    
    展开全文
  • count() 条件统计中为什么要加or null 案例:统计在今天注册的用户 写法一:直接在where后面跟上条件 select count(1) from user where DATE_FORMAT(register_time,'%Y-%m-%d')=CURDATE() 还有另一种写法:在...

    案例

    • 案例:统计在今天注册的用户

    写法一:直接在where后面跟上条件

    select count(1) from user where DATE_FORMAT(register_time,'%Y-%m-%d')=CURDATE()	
    

    还有另一种写法:在count函数中添加条件(需要加上or null),大家可以自行测试,如果不加or null的效果则是除null数据外的全部数据(不管是否符合count中指定的条件)

    select count(DATE_FORMAT(register_time,'%Y-%m-%d') = CURDATE() or null) from user 
    

    为什么会这样?

    因为在count只有在值为null时才不统计数据,而为false时是会统计数据的

    做个小测试:

    select count(false) from user
    

    会发现和下面这句是一样的情况:

    select count(1) from user
    

    分析count(1)的原理
    在这里插入图片描述
    在每一列后面都拼接上"1"这个字段,然后这一列的每一行的值也都为1

    分析count(false)的原理:
    在这里插入图片描述
    在每一列后面都拼接上"false"这个字段,然后这一列的每一行的值也都为false

    即:count中的false,根本不是我们理解的那个false,你可以理解他就是一个普通的"false"字符串,和你在count中写一个1、2、3是一样的道理;

    false表达不了"假"的意思,那怎么样才能表达"假"的意思呢?

    答:就是null,在count计数时,只有遇到null,MySQL才会认为条件为假,即:不统计这条数据;

    至于or的话,和我们平常的操作符一样,第一个条件是true就是不执行or后面的条件,如果第一个条件不为true,那应该就不需要统计这条数据,所以就加个or null,告诉MySQL不需要统计这条数据;

    总结

    其实在count里面传递参数计算统计时根本不关心条件表达式里面的返回值,因为他把返回的true、false等值当做一个普通的值,你可以把它理解为就是1/2/3这样的普通值,也就是这句代码:

    select count(1) from user;
    

    所以当count条件不成立时返回false的时候,此时MySQL不认,他会把它当做类似于下面的SQL:

    select count(false) from user;
    

    我们刚刚分析过MySQL遇到null是就不会统计这条数据,那好办,我们把count里面的条件改为null不就玩了吗,当然还要加上我们本身的条件:

    select count(我们的条件 or null) from user;
    

    上面的SQL翻译过来就是:我们的条件不成立时就不统计这条数据;

    展开全文
  • mysql统计多个count带入条件

    千次阅读 2018-11-09 16:49:25
    select count(CONDITION1 or null) as VAL1 ,count(CONDITION2 or null) as VAL2 ,count(CONDITION3 or null) as VAL3 from `TABLENAME`
  • select count(1) from 表 where 条件 group by 字段; 但是有时往往需要添加不同的条件已经去重的统计以上语句就不能满足需求。 解决方案为: 1.添加条件统计方案: COUNT(CASE WHEN 条件 THEN 1 ELSE NULL END)...
  • count_if按条件统计元素个数.pdf
  • 我在关联查询时,需要按不同的条件统计出两个或者多个count。并且也要显示出count为0的记录。 拆分问题: 1、按条件统计多个count 2、使用count后关联查询失效。count为0的记录不显示。 解决方法如下: 1...
  • count函数的分条件统计

    千次阅读 2018-05-14 18:51:13
    SELECT COUNT(b.com_sts) AS countall, COUNT( CASE WHEN b.com_sts = '0' THEN b.com_sts END ) countsts, COUNT( CASE WHEN b.com_sts = '1' THEN b.com_sts END ) AS countout, ( SELECT count(1) ...
  • mysql count条件查询

    千次阅读 2019-09-20 16:39:57
    使用count()函数实现条件统计的基础是对于值为NULL的记录不计数,常用的有以下三种方式,假设统计num大于200的记录 select count(num > 200 or null) from a; select count(if(num > 200, 1, null)) from a ...
  • package main import ( "fmt" ...) var DB *gorm.DB ... DB, err = gorm.Open("mysql", "root:123456@tcp(192.168.88.130:3306)/test?... DB.Set("gorm:table_...","daw").Count(&count) fmt.Println(count) }  
  • select count group by多个条件查询统计

    万次阅读 2018-07-20 10:54:50
    需要对一个表二维统计的情况下下需要对多个条件groupby 可以把条件放在count 里用case when区分,暂时只统计两个条件的,多的还没试; SELECT COUNT (CASE WHEN gender='F' THEN id ELSE null END ) AS F, ...
  • sql分组按条件统计count case when then

    千次阅读 2017-03-15 21:45:00
    COUNT(CASE WHEN (S.rank = 1) THEN S.loanContractId END ) AS 'MZ', //根据loanContractId 分组,并统计rank=1出现的次数
  • Hive中count统计数量的多种使用方式

    万次阅读 2017-11-16 15:06:46
    其他环境没有试,Hive上肯定...可以在count里使用case when、distinct等处理,满足日常数据统计需求。 select pt_day, count(*), count(uid),count(identifier), count(distinct uid),count(distinct identifier),
  • mysql count(*)条件统计 group by用法 mysql有时需要统计同一个变量名下同一个值出现的次数 前程无忧下的招聘信息,如果我们像统计同一个职位出现的次数,拿category列来说 select category as 职位,count(category)...
  • 很久没有更新Elasticsearch系列文章,一方面是之前学会的条件查询足以满足项目需求,另一方面是前段时间一直很忙,几个项目的需求交叉进行,没什么时间学习新的东西。 本篇博客将更新count、distinct、count...
  • 高性能MySQL之Count统计查询

    万次阅读 2018-07-24 12:02:59
    当时在忙,就回复了一句“innodb里面count统计都是实时统计,慢一些是正常的”, 周末闲暇下来,想到以前有好多人都问过关于count的问题,今天就聊聊MySQL之Count查询。  关于MySQL的count查询,很多人都会有疑问...
  • sql count()加distinct和条件去重统计

    千次阅读 2021-01-13 10:07:55
    表数据: userid userType ------------------------------------------ A 1 B 1 B 1 C 2 需求:查出userType=1和userType=2的用户数,并且直接用字段展示出来,可能还有很多...去重加上条件查询: select
  • 1、我们知道,SQL语句中用count函数统计记录数量,配合distinct关键字可以统计非重复的记录数量。例如: select count(*), count(city_name), count(distinct city_name) from tb_county  查询结果是: 2534 ...
  • mysql 有条件地计算行数 count

    千次阅读 2019-05-26 07:17:34
    count是sql的一个标准行统计函数,在实际应用中很是普遍,还有另外一种情况也经常会被用到:有条件地统计行数。除此之外,count统计时会跳过null值,部分count可用sum求和代替。
  • 函数返回匹配指定条件的行数。 SQL COUNT() 语法 SQL COUNT(column_name) 语法 COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入): SELECT COUNT(column_name) FROM table_nam SQL COUNT(*) 语法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 175,958
精华内容 70,383
关键字:

count统计,条件