mysql数据库之count()函数和sum()函数用法及区别说明

 更新时间:2023年06月19日 10:56:36   作者:white_ice  
这篇文章主要介绍了mysql数据库之count()函数和sum()函数用法及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mysql之count()和sum()用法及区别

1、mysql 数据库中 count() 函数是统计查询结果中的行数,例如我们有下表 user_auth

使用 count() 函数来查询结果个数,使用如下查询:

mysql > select count(*) from user_auth ;   

注意的是,count 会忽略掉 NULL 的结果, 所以 count(字段名) 这样使用的话,如果字段中包含为null的结果,将导致查询结果不准确,我们将表中数据更改如下:

此时查询:

mysql > select count(user_id) from user_auth;

结果如下:

2、mysql sum() 函数用于计算某一字段中所有行的数值之和( sum 求和时会对 null 进行过滤,不计算),例如如下查询:

mysql > select sum(user_id) from user_auth; 

结果如下:

另外也能使用 sum(条件) 进行对符合条件的结果行数进行求和,如下查询:

mysql > select sum(user_id is null),sum(aid = 1) from user_auth; 

结果如下:

需要注意的是,如果在没有返回行中使用 sum() 函数,sum 函数的返回值为 null,不是 0,例:

mysql > select sum(user_id) from user_auth where id not in (2,4,6);

结果如下:

此时使用JDBC或者一些第三方框架进行映射时就会报错,

解决办法是

使用IFNULL(sum(user_id),0) 或者 COALESCE(sum(user_id),0) 进行结果的转换。

mysql中sum()和count()函数按条件统计数据

sum()函数

一般求和

select sum(money) from user group by id;

按条件求和 (对所有金额大于100的数据进行求和)

select sum(if(money>=100,money,0)) from user group by id;

聚合函数中如果想汇总某一类数据的数量,可以在括号中增加条件:

sum(case when 字段>0 then 1 else 0 end) as 字段

count()函数

要注意的是:count(case when 字段>0 then 1 else 0 end) as 字段,这样写的话

count函数不管记录内容是0或1,它的作用只是计算记录数,计算出来的是0和1的全部次数,如果你要计算次数,用sum(case when 字段>0 then 1 else 0 end) as 字段

或者你用 count(case when 字段>0 then 1 else null end) as 字段 这种写法

基本原理是 使用了数据库count(null)时返回的是0 ,count(非null)返回是1

SQL的执行顺序

  • 第一步:执行FROM
  • 第二步:WHERE条件过滤
  • 第三步:GROUP BY分组
  • 第四步:执行SELECT投影列
  • 第五步:HAVING条件过滤
  • 第六步:执行ORDER BY 排序

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql 5.7.12 winx64安装配置方法图文教程

    mysql 5.7.12 winx64安装配置方法图文教程

    这篇文章主要为大家分享了mysql 5.7.12winx64安装配置方法图文教程,感兴趣的朋友可以参考一下
    2016-05-05
  • Mysql使用索引的正确方法及索引原理详解

    Mysql使用索引的正确方法及索引原理详解

    这篇文章主要给大家介绍了关于Mysql使用索引的正确方法及索引原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • MySQL亿级数据平滑迁移双写方案实战

    MySQL亿级数据平滑迁移双写方案实战

    预约业务与其他业务数据表存储在同一个数据库,当其他业务出现慢SQL等异常时,会影响到预约业务,为了提高系统稳定性和数据隔离性,需要将预约数据表从原来的数据库中迁移出来,单独建立数据库,涉及到的读写场景多,改造成本大,采用 Mybatis插件实现迁移所需的双写等功能
    2024-08-08
  • Mysql常用命令汇总

    Mysql常用命令汇总

    这篇文章主要介绍了Mysql常用命令,都是mysql数据库日常最基本的操作命令,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • Mysql一对多轻松实现追踪历史首条记录

    Mysql一对多轻松实现追踪历史首条记录

    本文介绍了在数据库中处理一对多关系时,如何使用JOIN和WHERE子句来找到每个主表记录对应的子表中特定记录(例如时间最早的记录),通过将B表与自身进行比较并使用MIN()函数,可以精确匹配到所需记录
    2024-12-12
  • mysqlhotcopy 正则使用小技巧

    mysqlhotcopy 正则使用小技巧

    mysqlhotcopy 是MySQL的热备工具,详细请看手册 ,为了安全起见我们给热备分配个用户
    2011-08-08
  • Mysql一些复杂的sql语句(查询与删除重复的行)

    Mysql一些复杂的sql语句(查询与删除重复的行)

    这篇文章主要介绍了Mysql一些复杂的sql语句(查询与删除重复的行),需要的朋友可以参考下
    2017-05-05
  • 详细分析MySQL主从复制

    详细分析MySQL主从复制

    这篇文章主要介绍了MySQL主从复制的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-08-08
  • MySQL自增ID用完的几种解决方案

    MySQL自增ID用完的几种解决方案

    MySQL的自增ID(AUTO_INCREMENT)用完之后,会出现重复ID的问题,那么如何解决这个问题呢,接下本文就给大家介绍MySQL自增ID用完的几种解决方案,需要的朋友可以参考下
    2023-07-07
  • linux下安装升级mysql到新版本(5.1-5.7)

    linux下安装升级mysql到新版本(5.1-5.7)

    这篇文章主要介绍了linux下安装升级mysql到新版本(5.1-5.7),需要的朋友可以参考下
    2016-03-03

最新评论