Mysql之聚合函数

news2025/1/15 13:50:12

Mysql之聚合函数

  • 什么是聚合函数
    • 常见的聚合函数
      • GROUP BY
      • WITH ROLLUP
      • HAVING
      • HAVING与WHERE的对比
    • 总结
    • SQL底层原理

什么是聚合函数

对一组数据进行汇总的函数,但是还是返回一个结果
聚合函数也叫聚集,分组函数

在这里插入图片描述

常见的聚合函数

1.AVG(): 求平均值
2.SUM() :求总值
3.MIN(): 最小值
4.MAX(); 最大值
5.COUNT:返回表中的个数

SUM,COUNT这些函数,会自动过滤掉空值情况
AVG = SUM / COUNT

注意:如果计算表中有几条记录,可以用以下的方式
1.COUNT(1)
2.COUNT(*)
3.COUNT(具体字段) (不一定正确)

说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行

一般来说,三者的效率是COUNT(*) == COUNT(1) > COUNT(具体字段)
后面Mysql优化部分会细讲

GROUP BY

GROUP BY的作用就是,按类分组

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;

注意:
1.GROUP BY中声明的字段,可以出现在SELECT中

2.GROUP BY声明在FROM后面,WHERE后面,ORDER BY前面,LIMIT前面

WITH ROLLUP

使用 WITH ROLLUP,此函数是对聚合函数进行求和
而在groupby后面还可以加入WITH CUBE和WITH ROLLUP 等关键字
对数据进行汇总。不过这个CUBE在mysql中并不适用。

注意 with rollup是对 group by 后的第一个字段,进行分组求和

ORDER BY不能在rollup中使用,两者为互斥关键字.如果使用,会抛出以下错误:
Error Code:1221. Incorrect usage of CUBE/ROLLUP and ORDER BY。mysql5.7中是不支持的,在8.0以后支持。

HAVING

作用:用来过滤数据
如果在过滤条件中,使用了聚合函数,那么就必须要用HAVING来替换WHERE
HAVING 必须声明在GROUP BY的后面

结论
1.当过滤条件有聚合函数的时候,则必须声明在HAVING中
2.当过滤条件没有聚合函数的时候,则可以声明在HAVING或者WHERE中,
但是建议大家声明在WHERE中

HAVING与WHERE的对比

HAVING的使用范围比WHERE广泛
但是在没有聚合函数的时候,WHERE的效率要高于HAVING

总结

#方式1:
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...


#方式2:
SELECT ...,....,...
FROM ... JOIN ...
ON 多表的连接条件
JOIN ...
ON ...
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...


#其中:
#(1)from:从哪些表中筛选
#(2)on:关联多表查询时,去除笛卡尔积
#(3)where:从表中筛选的条件
#(4)group by:分组依据
#(5)having:在统计结果中再次筛选
#(6)order by:排序
#(7)limit:分页

SELECT表的执行顺序
在这里插入图片描述

SQL底层原理

例如,如果在多表查询的时候

  1. 首先先通过 CROSS JOIN 求笛卡尔积,相当于得到虚拟表 vt(virtual table)1-1;
  2. 通过 ON 进行筛选,在虚拟表 vt1-1 的基础上进行筛选,得到虚拟表 vt1-2;
  3. 添加外部行。如果我们使用的是左连接、右链接或者全连接,就会涉及到外部行,也就是在虚拟 表 vt1-2 的基础上增加外部行,得到虚拟表 vt1-3。 当然如果我们操作的是两张以上的表,还会重复上面的步骤,直到所有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1233271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

choices参数的使用、MVC和MTV的模式、创建表对表关系的三种创建方式

【1】choices参数的使用 应用场景:针对表中可能列表完全的字段,采用choices参数 例如:性别,代码如下 # 1.创建一张表class gender_info(models.Model):name models.CharField(max_length32)password models.CharField(max_lengt…

webstorm配置console.log打印

一、设置面板 打开设置面板(windows 快捷键: ctrl alt s) ,找到 编辑器 -> 实时模板 -> JavaScript -> log,点击log会出现对应的配置 二、模板文本 将下面这些模板文本粘贴进去 console.info("🚀 ~ file:$file…

自然语言处理:Transformer与GPT

Transformer和GPT(Generative Pre-trained Transformer)是深度学习和自然语言处理(NLP)领域的两个重要概念,它们之间存在密切的关系但也有明显的不同。 1 基本概念 1.1 Transformer基本概念 Transformer是一种深度学…

Python matplotlib Linecollection() 函数用法

Python matplotlib Linecollection 函数用法 今天看到了这个函数的用法觉得很有意思,因为通常,如果我们想要在 matplotlib 中绘制多条线条,通常我们的做法是使用 for 循环绘制。然而当想要绘制的线条逐渐多起来的时候,使用 for 循…

如何在外部数据库中存储空间化表时使用Mapinfo_mapcatalog

开始创建地图目录表之前 您将使用EasyLoader在要使用的数据库中创建地图目录表。EasyLoader与MapInfo Pro一起安装。 (工具“DBMS_Catalog”不再随MapInfo Professional 64位一起提供,因为它的功能可以在EasyLoader工具中找到。) ​ 注&…

windows 查看防火墙设置命令使用方法

点击键盘上windows键,输入cmd,选择以管理员身份运行 输入下面命令查看使用说明 netsh advfirewall firewall add rule ? 发现显示不全,不方便看 可以输入下面命令,生成文件,方便查看 netsh advfirewall firewall ad…

人机交互——机器人形态

1.聊天机器人 2.任务型机器人 3.面向FAQ的问答机器人 4.面向KB的问答机器人

【C++】——多态性与模板(其二)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

人工智能带来的各方面影响

近年来,人工智能(AI)技术在各个领域中的应用越来越广泛,已经开始对我们的生活方式、社会和经济结构产生深远的影响。 1.人工智能家庭化。人工智能技术使我们的生活变得更加便利和智能化。在家庭日常中,智能家居、智能…

二百零七、Flume——Flume实时采集5分钟频率的Kafka数据直接写入ODS层表的HDFS文件路径下

一、目的 在离线数仓中,需要用Flume去采集Kafka中的数据,然后写入HDFS中。 由于每种数据类型的频率、数据大小、数据规模不同,因此每种数据的采集需要不同的Flume配置文件。玩了几天Flume,感觉Flume的使用难点就是配置文件 二、…

图像处理02 matlab中NSCT的使用

06 matlab中NSCT的使用 最近在学习NSCT相关内容,奈何网上资源太少,简单看了些论文找了一些帖子才懂了一点点,在此分享给大家,希望有所帮助。 一.NSCT流程 首先我们先梳理一下NSCT变换的流程,只有清楚流程才更好的理清…

一文详看大模型长文本如何评估:四大主流评测数据集的任务设计、数据集构建方案

大语言模型(LLM)尽管在各种语言任务中表现抢眼,但通常仅限于处理上下文窗口大小范围内的文本。 有越来越多的基准被提出来测试LLM的长文本理解能力。 当前具有代表性的长文本评测主要包括Zero-SCROLLS、L-Eval、LongBench以及loogle四个基准…

万字解析设计模式之 装饰者模式

一、装饰者模式 1.1概述 装饰者模式是一种结构型设计模式,它允许在运行时动态地为一个对象添加额外的职责。它以一种透明的方式来扩展对象的功能,而不需要通过子类来实现。在装饰者模式中,有一个基本对象,也称为组件,…

如何给面试官解释什么是分布式和集群?

分布式(distributed) 是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。 集群(cluster) 是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群&#…

你真的了解 Cookie 和 Session 吗?

文章目录 Cookie 和 Session总结 Cookie 和 Session cookie HTTP cookie(web cookie、browser cookie)是服务器发送给用户 web 浏览器的一小段数据。浏览器可能会存储 cookie,并在以后的请求中将其发送回同一台服务器。通常,HTTP …

数据库中的undo与redo的作用

undo与redo的作用 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期…

Git - 版本控制系统

一、概述 git是一个免费开源,分布式的代码版本控制系统,帮助开发团队维护代码。作用是记录代码内容,切换代码版本,多人开发时高效合并代码内容。 直接安装git,默认下一步,然后就能在VScode中看到git控制台 …

YOLOv8更换骨干网络HorNet:递归门控卷积的高效高阶空间交互——涨点神器!

🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结   -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …

海康威视监控相机的SDK与opencv调用(非工业相机)

1.研究内容 本篇主要对海康威视的监控相机的SDK回调进行研究,并于opencv结合,保存图像,以供后续其他处理,开发语言为C 2.步骤及方法 2.1 海康SDK介绍 海康SDK下载地址 根据自身编译环境,下载对应的SDK,需要注意的是…

rotation matrix reflection matrix

文章目录 1. rotation matrix1.1 结论 2. reflection matrix2.1 结论 1. rotation matrix 图像逆时针旋转 θ \theta θ的矩阵 Q r o t a t e [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] (1) Q_{rotate}\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\c…