【MySQL】聚合函数和分组聚合

👦个人主页:@Weraphael
✍🏻作者简介:目前学习计网、mysql和算法
✈️专栏:MySQL学习
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨
目录
- 一、聚合函数
- 1.1 count函数
- 1.2 sum函数
- 1.3 avg函数
- 1.4 max函数
- 1.5 min函数
- 二、分组聚合(group by + having)
- 2.1 group by
- 2.2 having
- 2.3 having vs where
一、聚合函数
在
MySQL中,聚合函数用于对数据进行汇总和统计,并返回单个值作为结果
1.1 count函数
- 用于计算指定列中非
null值的行数。它通常用于统计符合特定条件的行数。
【语法】
select count(distinct 列名) [as] 重命名 from 表名;
# as也可以不加
# 可以去重distinct统计
注意:
- 如果使用
count(*),它会统计表中所有行的数量,包括null值。

- 如果使用
count(列名),它会统计指定列中非null值的行数。

【使用案例】
假设有一个名为employees的表,包含员工的信息,如下所示:

- 统计表中的总行数
select count(*) from employees;

- 计算特定条件下的行数,比如部门为
HR的员工人数:
select count(*) as HR的员工人数 from employees where department='HR';

1.2 sum函数
- 用于计算指定列的数值总和。它通常用于计算某个列中的数值总和,比如计算某一列的总销售额、总成绩等。
【语法】
select sum(distinct 列名) [as 重命名] from 表名;
- 注意:如果指定的列包含
null值,则sum函数会忽略null值。

任何数对null进行+-*/都是null,由此看出sum 函数确实忽略了null值。
【使用案例】
假设有一个名为sales的表,包含产品销售信息,表中数据如下:

- 计算总销售额
select sum(amount) from sales;

- 计算特定条件下的销售总额,比如产品为
A的销售总额
select sum(amount) A的总销售额 from sales where product='A';

- 计算出总销售额后再除以
5
select sum(amount)/5 from sales;

1.3 avg函数
- 用于计算指定列的平均值。它通常用于计算某一列的平均数,比如计算某产品的平均销售额、平均成绩等。
【语法】
select avg(distinct 列名) from 表名;
注意:如果指定的列包含null值,则avg函数会忽略null值。
【使用案例】
假设有一个名为grades的表,包含学生的考试成绩信息,表中数据如下:

- 计算班级学生的平均值
# 写法一:
select avg(score) from grades;# 写法二:
select sum(score)/count(score) from grades;

1.4 max函数
- 用于获取指定列中的最大值。它通常用于找到某一列中的最大值,比如找到某产品的最高价格、最高温度等。
【语法】
select max(列名) from 表名;
注意:如果指定的列包含null值,则max函数会忽略null值。
【使用案例】
假设有一个名为products的表,包含产品的价格信息,表中数据如下:

- 找到价格的最高值
select max(price) from products;

- 找到特定条件下的最大值,比如产品名称为
B的价格
select max(price) from products where product='B';

1.5 min函数
- 用于获取指定列中的最小值。它通常用于找到某一列中的最小值,比如找到某产品的最低价格、最低温度等。
基本语法如下:
【语法】
select min(列名) from 表名;
注意:如果指定的列包含null值,则min函数会忽略null值。
【使用案例】
假设有一个名为Student的表,包含学生的语数英成绩,表中数据如下:

- 返回数学成绩最低分
select min(math) from Student;

- 返回
>70分以上的数学最低分
select min(math) from Student where math>70;

二、分组聚合(group by + having)
2.1 group by
- 聚合函数常与
group by结合使用,以便对数据进行分组聚合。(对数据进行分组统计)- 分组顾名思义就是将一组拆成了多个组,然后进行各自组内的统计。也可以看成将一张表拆成多个子表进行聚合统计。
- 执行顺序:先分组,再聚合。
【语法】
select group_name, 聚合fuc, ... from 表名 group by group_name, ...;
注意: group_name:除聚合函数括号里的列名以外,只有在group by后面出现的列名称,才能在select后面出现。
【使用案例】
-
准备工作:导入
scott_data.sql文件(来自oracle 9i的经典测试表)。该scott由三个表组成,分别是: -
emp员工表(子表) -
dept部门表(从表) -
sakgrade工资等级表(主表)

这里重点看emp员工表(子表)即可
- 通过员工表,显示每个部门的平均工资和最高工资
select deptno, avg(sal),max(sal) from emp group by deptno;

- 显示每个部门的每种岗位的平均工资和最低工资
select deptno, job, avg(sal),min(sal) from emp group by deptno, job;

2.2 having
having的功能其实和where一样,当你需要在 分组后的结果集上应用条件过滤 时,可以配合having子句使用。
- 显示平均工资低于
2000的部门和它的平均工资
select deptno,avg(sal) 平均工资 from emp group by deptno having 平均工资<2000;

注意:where子句后面不能用重命名,而having可以。

SMITH员工不参与统计,显示平均工资低于2000的部门和它的平均工资
select deptno,job,avg(sal) 平均工资 from emp where ename!='SMITH' group by deptno,job having 平均工资<2000;

2.3 having vs where
在sql查询中,where和having都是用于筛选数据的关键字,但它们有着不同的作用范围和使用位置。
-
作用范围
where用于在对原始数据进行查询之前筛选行,它作用于未分组的数据having用于在对数据进行聚合后筛选结果,它作用于已分组的数据。
-
使用位置
where子句通常出现在sql查询的起始部分,用于过滤原始数据表的行。having子句通常出现在group by子句之后,用于筛选分组后的结果。
相关文章:
【MySQL】聚合函数和分组聚合
👦个人主页:Weraphael ✍🏻作者简介:目前学习计网、mysql和算法 ✈️专栏:MySQL学习 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬…...
RDD算子(四)、血缘关系、持久化
1. foreach 分布式遍历每一个元素,调用指定函数 val rdd sc.makeRDD(List(1, 2, 3, 4)) rdd.foreach(println) 结果是随机的,因为foreach是在每一个Executor端并发执行,所以顺序是不确定的。如果采集collect之后再调用foreach打印…...
51之定时器与中断系统
目录 1.定时器与中断系统简介 1.1中断系统 1.2定时器 1.2.1定时器简介 1.2.2定时器大致原理及其配置 1.2.3定时器所需的所有配置总介 2.定时器0实现LED闪烁 3.使用软件生成定时器初始化程序 1.定时器与中断系统简介 1.1中断系统 首先,我们需要来了解一下什么…...
C语言中的内存函数
相比于内存函数,字符串函数和字符函数是对字符串和字符进行操作,内存函数是对内存进行操的。下面跟大家分享我学到的几个内存函数。 memcpy函数 void* memcpy(void* dest, const void* sour, size_t num); dest是目标地址,sour要拷贝的源地…...
JS继承与原型、原型链
在 JavaScript 中,继承是实现代码复用和构建对象关系的重要概念。本文将讨论原型链继承、构造函数继承以及组合继承等几种常见的继承方式,并提供相应的示例代码,并分析它们的特点、优缺点以及适用场景。 在开始讲解 JavaScript 的继承方式之…...
C#基础知识总结
C语言、C和C#的区别 ✔ 面向对象编程(OOP): C 是一种过程化的编程语言,它不直接支持面向对象编程。然而,C 是一种支持 OOP 的 C 的超集,它引入了类、对象、继承、多态等概念。C# 是完全面向对象的ÿ…...
机器学习模型——决策树
决策树的定义: 决策树利用树形数据结构来展示决策规则和分类结果,它是一种归纳学习算法,可以将复杂数据转化为可以预测未知数据的模型。每一条从根节点到叶节点的路径都代表一条决策规则。 决策树内的一些重要名词: 信息熵&am…...
【HTML】制作一个简单的三角形动态图形
目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML和CSS代码,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],CSS的文件名…...
Acwing.504 转圈游戏(带取余的快速幂)
题目 n个小伙伴(编号从 0到 n−1)围坐一圈玩游戏。 按照顺时针方向给 n个位置编号,从 0到 n−1。 最初,第 0号小伙伴在第 0号位置,第 1号小伙伴在第 1号位置,…,依此类推。 游戏规…...
pair作为unordered_map的key报错
问题 pair作为unordered_map的key报错,编译时会报错 原因 因为pair没有哈希函数 解决方法 定义哈希函数 template <typename T> inline void hash_combine(std::size_t &seed, const T &val) {seed ^ std::hash<T>()(val) 0x9e3779b9 (…...
Windows提权—数据库提权-mysql提权mssql提权Oracle数据库提权
目录 Windows 提权—数据库提权一、mysql提权1.1 udf提权1.1.2 操作方法一 、MSF自动化--UDF提权--漏洞利用1.1.3 操作方法二、 手工导出sqlmap中的dll1.1.4 操作方法三、 moon.php大马利用 1.2 mof提权1.3 启动项提权1.4 反弹shell 二、MSSQL提权MSSQL提权方法1.使用xp_cmdshe…...
为什么android创建Fragment推荐用newInstance
FullScreenDialogFragment使用newInstance方法不是因为它是一个单例,而是因为这是创建DialogFragment实例并同时提供参数的一种标准模式。这种模式通常称为静态工厂方法模式,在Android开发中被广泛使用,尤其是用于Fragment的实例化。 newIns…...
MyBatis的xml实现方式
1、该项目引入的依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…...
大模型prompt技巧——思维链(Chain-of-Thought)
1、Zero-shot、One-shot、Few-shot 与fintune prompt的时候给出例子答案,然后再让模型回答。 2、zero-shot-CoT “Let’s think step by step”有奇迹效果 3、多数投票提高CoT性能——自洽性(Self-consistency) 多个思维链,然后取…...
内网穿透的应用-如何在Android Termux上部署MySQL数据库并实现无公网IP远程访问
文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身…...
面试算法-133-区间子数组个数
题目 给你一个整数数组 nums 和两个整数:left 及 right 。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数。 生成的测试用例保证结果符合 32-bit 整数范围。 示例 1: 输入ÿ…...
物联网实战--入门篇之(八)嵌入式-空气净化器
目录 一、风扇调速 二、通讯协议 三、净化器运行逻辑 一、风扇调速 单片机是不能直接驱动电机的,因为主芯片的驱动电流比较小(50mA左右),他们之间正常还要有个电机驱动器,常用的有TB6612、L298和L9110等,目前项目用的这个电机它…...
macOS上QT打开麦克风和摄像头的权限问题
同样的代码在Windows上可以轻松操作麦克风和摄像头,特别是用QT这种跨平台的框架。但是对macOS这种权限要求完善的系统还需要进行一些配置,那就是增加Info.plist属性配置文件。如果是之前的早期5.x版本的QTCreator因为使用的是qmake构建系统,估…...
鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题
鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题 一、运行环境 1、硬件 手机型号:NOVA 7 系统:HarmonyOS版本 4.0.0 2、软件 android SDK platforms:14.0(API Level 34)、13.0(API Level 33) SDK Build-T…...
Spring源码解析上
spring源码解析 整体架构 defaultListableBeanFactory xmlBeanDefinitionReader 创建XmlBeanFactory 对资源文件进行加载–Resource 利用LoadBeandefinitions(resource)方法加载配置中的bean loadBeandefinitions加载步骤 doLoadBeanDefinition xml配置模式 validationMode 获…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...
