当前位置: 首页 > news >正文

第13章 聚合函数

一、聚合函数介绍

        实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。(可以是一个字段的数据,也可以是通过分组后每一组的数据)。

1.1 常见的聚合函数

函数解释
AVG()求一组数据的平均值。(不计算null值)(只适用于数值)
SUM()求一组数据的总和。(不计算null值)(只适用于数值)
MAX()求一组数据中的最大值。(不计算null值)(适用于数值、字符串、日期时间等任意数据类型)
MIN()求一组数据的最小值。(不计算null值)(适用于数值、字符串、日期时间等任意数据类型)
COUNT()求一组数据的个数。(不计算null值)(适用于数值、字符串、日期时间等任意数据类型)

1.2 聚合函数的语法

注:聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。

1.3 AVG和SUM函数

只适用于对数值型数据使用AVG 和 SUM 函数。

1.4 MIN和MAX函数

可以对任意数据类型的数据使用 MIN 和 MAX 函数。

1.5 COUNT函数

COUNT(*)返回表中记录总数(或指定字段在查询结果中出现的次数),适用于任意数据类型

COUNT(expr) 返回expr不为空null值不计算在内)的记录总数。因为不计算空值,所以expr是字段名时得出的记录总数并不是正确的记录总数。

综上,一共有三种计算记录总数的方式。count(字段)、count(*)、count(1)。其中推荐使用count(*)和count(1)两种方式,其中1表示“并不指明哪一个字段”,相当于拿1来表示每一条记录,当然使用2等任意字符都可以。

问题:用count(*),count(1),count(列名)谁好呢?

        其实,对于MyISAM引擎的表是没有区别的,这种引擎内部有一计数器在维护着行数,三者效率相同都是O(1),并且结果也相同。 Innodb引擎的表用count(*),count(1)直接读行数,复杂度是O(n),因为innodb真的要去数一遍,但好于具体的count(列名),故效率:count(*) = count(1) > count(列名)。

问题:能不能使用count(列名)替换count(*)?

        不要使用 count(列名)来替代 count(*) , count(*) 是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。 说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。

        AVG = SUM / COUNT 永远成立,因为AVG和SUM也不计算空值。

http://www.lryc.cn/news/481281.html

相关文章:

  • 【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(4)
  • C# 中 LibraryImport 和 DllImport有什么不同
  • PDF编辑工具Adobe Acrobat DC 2023安装教程(附安装包)
  • 系动词、表语和主语补足语
  • 【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析
  • Java 详解 接口
  • wordpress搬家迁移后怎么修改数据库用户名
  • C# 用于将一个DataTable转换为Users对象的列表
  • Spark中的shuffle
  • 网络安全SQL初步注入2
  • 使用Go语言编写一个简单的NTP服务器
  • 注意力机制篇 | YOLO11改进 | 即插即用的高效多尺度注意力模块EMA
  • 昇思大模型平台打卡体验活动:项目3基于MindSpore的GPT2文本摘要
  • web——[GXYCTF2019]Ping Ping Ping1——过滤和绕过
  • 婚礼纪 9.5.57 | 解锁plus权益的全能结婚助手,一键生成结婚请柬
  • M1M2 MAC安装windows11 虚拟机的全过程
  • 监控架构-Prometheus-普罗米修斯
  • Kylin Server V10 下自动安装并配置Kafka
  • windows环境下cmd窗口打开就进入到对应目录,一般人都不知道~
  • 企微SCRM价格解析及其性价比分析
  • 【SpringMVC】记录一次Bug——mvc:resources设置静态资源不过滤导致WEB-INF下的资源无法访问
  • 【React】React 生命周期完全指南
  • 【NLP】使用 SpaCy、ollama 创建用于命名实体识别的合成数据集
  • 【C++练习】二进制到十进制的转换器
  • Vue功能菜单的异步加载、动态渲染
  • 云技术基础学习(一)
  • 【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美
  • MFC工控项目实例二十九主对话框调用子对话框设定参数值
  • Java | Leetcode Java题解之第546题移除盒子
  • 【前端】Svelte:响应性声明