MySQL_聚合函数分组查询

上篇复习:

设计数据库时的三大范式
1.第一范式,一行数据中每一列不可再分
关系型数据库必须要满足第一范式,设计表的时候,如果每一列都可以用SQL规定的数据类型描述,就天然满足第一范式.

2.第二范式,在第一范式的基础上,消除了部分函数依赖
一个表中存在复合主键,当有一列只依赖复合主键中的某一个键,那就这种设计就不满足第二范式不满足第二范式时会出现一些问题:数据冗余,更新异常,插入异常,删除异常如果一个表中的键只有一列时,那么这种设计就天然满足第二范式

3.第三范式,在第二范式的基础上,消除了传递依赖


数据库的关系模型
1.一对一关系
2.一对多关系
3.多对多关系
4.没有关系


设计表的过程
通过需求找出实体
确定实体之间的关系
根据不同的关系按照固定的方法去创建表

1.聚合函数

1.在 MySQL 中,聚合函数是用于计算多行数据的统计信息的函数,例如总和、平均值、最大值、最小值和行数等。聚合函数用于在查询结果中创建单个值,该值代表聚合操作的结果。将多行数据聚合成单个结果,这是聚合函数得名的由来。

以下是 MySQL 中常见的聚合函数:

在介绍以上函数时我们先看一下我们要操作表的数据:

1. COUNT()- 统计数量
  • 功能:统计指定列中的非空值个数,或者统计表中的总行数。
  • 使用场景:用于统计表中数据条数或分组数据条数。
    • COUNT(*):统计所有行的数量(包括空值)。
    • COUNT(column):统计指定列非空值的数量。

由上我们可以看到当数学行中有一个值为空时,count函数并没有那个为空的数据给统计当中。

2. SUM()- 计算总和
  • 功能:计算指定数值列的所有行的总和。
  • 使用场景:用于对数值列求和,如统计总销售额或总薪资。

当我们计算非数字的数据是,我们可以看到爆出了错误

如果对非数值类型的列进行运算,会得到一些警告信息

3. AVG()- 计算平均值
  • 功能:计算指定数值列的召唤。
  • 使用场景:用于求特定分数列的平均分数,如计算平均薪资或平均分数。
  • 求语文的平均值

2.求语文,数学,英语三门课的总分的平均值

4. MAX()- 获取峰值
  • 功能:返回指定列中的顶部。
  • 使用场景:用于查找特定列的顶峰,如最高薪资或最高分数。

1.找到数学最高分数:

5.-MIN()获取最小值
  • 功能:简单地返回指定列中。
  • 使用场景:用于轻松查找特定列,如最低薪资或最低份额。

1.找到英语最低分数:

2. GROUP BY 子句的讲解:

GROUP BY子句在MySQL中非常常用,通常用于对某些或某些列对数据进行分组。它结合聚合函数(如COUNT()SUM()AVG()等)一起使用,用于对每个分组的数据进行统计或汇总。子句经常出现在查询语句的SELECT部分,目的是让数据库返回每一组的统计结果,而不是返回原始的每一行数据。

GROUP BY基本概念

  • 分组GROUP BY会根据指定的列将数据拆分为若干组。每个组中的数据具有相同的值(即在分组字段中相同的值会被归为一组)。
  • 聚合函数GROUP BY通常和聚合函数结合使用,比如COUNT()SUM()AVG()MAX()MIN()等,用于对每一组的数据进行汇总统计。

  • column1,column2等:这些是你希望根据其进行分组的列。
  • aggregate_function(column3):这个代表评估每个分组的聚合函数,column3是你要汇总的数据列。
  • table_name:数据表的名称。
  • WHERE:任选的筛选条件,GROUP BY会在应用WHERE筛选条件之后对数据进行分组。

GROUP BY应用程序

  1. 统计每个部门的员工数量
  2. 计算每个部门的平均工资
  3. 找到每个部门的最高薪资
  4. 按时间部分分组,统计每日或月刊的销售全国

GROUP BY的常见用法和示例

假设我们有如下表:

1.按部门分组,统计每个部门的员工数量

SELECT department, COUNT(*) AS num_employees
FROM employees
GROUP BY department;

解释:按department列分组,统计每个部门的员工数量。

2.按部门分组,计算每个部门的薪资总和

SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department;

解释:按department列分组,计算每个部门的薪资总和。

3.按部门分组,计算每个部门的平均工资

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

解释:按department列分组,计算每个部门的平均工资。

这些代码示例展示了如何使用GROUP BY子句按不同的字段进行分组,并结合聚合函数(如COUNT()SUM()AVG()MAX()MIN())进行数据汇总。HAVING子句则用于对分组结果进行进一步筛选。

  • GROUP BY:将数据按一个或多个字段进行分组。
  • 聚合函数:对每个分组的值进行聚合计算,如COUNT()SUM()AVG()等。

3. HAVING子句

在SQL中,HAVING子句允许对分组后的结果进行筛选,它通常与GROUP BY子句一起使用。你可以理解为,HAVINGWHERE的“分组后”版本,你在数据分组后进行过滤。

HAVING子句的作用

  • WHERE子句:用于在分组之前对数据进行筛选。
  • HAVING子句:用于在分组之后对分组结果进行筛选。

一般来说,HAVING可以过滤聚合函数计算后面的结果,比如COUNT()SUM()AVG()等聚合结果。通常情况下,WHERE子句不能用于聚合函数的筛选,因为WHERE是在数据行级别进行过滤的,而聚合函数是在分组中随后对数据进行计算的。

HAVING基本原理

  • WHERE:用于过滤原始数据行(可选)。
  • GROUP BY:用于将数据按一个或多个列进行分组。
  • HAVING:用于对分组后的结果进行筛选,常用于聚合函数的条件。

HAVING子句注意事项

  1. HAVING是在分组后使用的,它只能在聚合(如COUNT()、、SUM()AVG())计算完成后使用。
  2. HAVING子句可以处理聚合函数,而WHERE不能。
  3. HAVING可以与GROUP BY子句一起使用,来过滤那些不条件符合的分组。

1. 查询每个部门的员工数量,但只返回员工数量大于 2 的部门

SELECT department, COUNT(*) AS num_employees FROM employees GROUP BY department HAVING COUNT(*) > 2;

解释:按department字段分组,统计每个部门的员工数量,并用来HAVING COUNT(*) > 2筛选员工数量大于2的部门。

2.查询每个部门的薪资总和,但只返回薪资总和超过15000的部门

SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department
HAVING SUM(salary) > 15000;

解释:按department字段分组,计算每个部门的薪资总和,并使用HAVING SUM(salary) > 15000来筛选薪资总和大于15000的部门。

3.查询每个部门的平均薪资,但只返回平均薪资大于5500的部门

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 5500;

解释:按department字段分组,计算每个部门的平均薪资,并使用HAVING AVG(salary) > 5500来筛选平均薪资大于 5500 的部门。

4. 查询每个部门的最高薪资,但只返回最高薪资大于 6000 的部门

SELECT department, MAX(salary) AS max_salary
FROM employees
GROUP BY department
HAVING MAX(salary) > 6000;

解释:按department字段分区,查找每个部门的最高薪资,并使用HAVING MAX(salary) > 6000来筛选最高薪资大于 6000 的部门。

HAVING与此WHERE对比:

示例:WHEREHAVING的联合使用

有时你可能希望在WHERE子句中先过滤原始数据,然后再利用HAVING对分组结果进行进一步筛选。

SELECT department, COUNT(*) AS num_employees
FROM employees
WHERE salary > 5000  -- 先筛选薪资大于 5000 的员工
GROUP BY department
HAVING COUNT(*) > 1;  -- 然后筛选员工数量大于 1 的部门

解释:首先通过WHERE salary > 5000过滤薪资大于 5000 的员工,然后使用HAVING COUNT(*) > 1进一步筛选员工数量大于 1 的部门。

总结

  1. WHERE子句:用于在分组前过滤数据行。
  2. HAVING子句:用于在分组后对分组结果进行筛选,特别适用于聚合函数的条件过滤。
  3. HAVINGGROUP BY:通常与GROUP BY一起使用,便于对分组后的结果进行筛选。
  4. WHEREHAVING的结合使用:先使用WHERE子句进行行级筛选,然后再使用子句HAVING进行分组后的筛选。

4.  结语

         太棒了!🎉 你已经成功掌握了 MySQL 中的聚合函数和分组查询,像一个真正的数据库魔法师一样,能够轻松地在数据的海洋中捕捉到你想要的信息!💻✨

        通过 `GROUP BY`,你已经学会了如何将数据分组,像整理书架一样,把数据按类别归档;而通过聚合函数(`COUNT()`、`SUM()`、`AVG()` 等),你可以轻松计算每个组的总和、平均数、最大值、最小值,甚至是每个小组的"英雄"——那些最独特的值!🌟

       更妙的是,你还学会了如何结合 `HAVING` 子句,像一位细心的挑选者,在大海捞针的过程中精准筛选出最符合要求的数据分组!🧙‍♂️

       就像烹饪一道完美的菜肴,掌握了这些基本的 SQL 工具,你已经有了无限的可能性去打造属于你的数据盛宴!数据的世界充满了无限乐趣和挑战,每一个查询语句都是一次探险,你的探索才刚刚开始!🚀

      继续保持好奇心,动手实践,试着用你新学到的技巧解决更多的实际问题,做一个SQL小达人!如果有任何疑问,别忘了我始终在这儿,随时等候为你解答!加油!🎉💪

     学习 MySQL 的旅程就像探险一样,充满了惊喜与成就感,愿你在这条数据之路上越走越远,开心又充实!🎈

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

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

相关文章

【Ai教程】Ollma安装 | 0代码本地运行Qwen大模型,保姆级教程来了!

我们平时使用的ChatGPT、kimi、豆包等Ai对话工具,其服务器都是部署在各家公司的机房里,如果我们有一些隐私数据发到对话中,很难保证信息是否安全等问题,如何在保证数据安全的情况下,又可以使用大预言模型,O…

FastAPI全方位分析:优劣尽显

近年来,随着技术的飞速发展,快速构建高性能API的需求越来越强烈。Python作为一个广泛使用的编程语言,也在这一领域下涌现出了许多优秀的框架。FastAPI便是其中一颗璀璨的新星。 FastAPI以其卓越的性能和独特的功能吸引了众多开发者。本文将深入剖析FastAPI的各个方面,详细…

LongVU :Meta AI 的解锁长视频理解模型,利用自适应时空压缩技术彻底改变视频理解方式

Meta AI在视频理解方面取得了令人瞩目的里程碑式成就,推出了LongVU,这是一种开创性的模型,能够理解以前对人工智能系统来说具有挑战性的长视频。 研究论文 "LongVU:用于长视频语言理解的时空自适应压缩 "提出了一种革命…

什么是兼容性测试

兼容性测试,提供具有兼容性特性的云端设备(覆盖主流品牌、SDK、分辨率),通过模拟用户行为进行真机测试。及时有效的发现应用中存在的兼容性问题。解除测试人员的双手,提高测试效率,保证产品在海量真机上的高…

IDEA:ctrl+/ 快捷键生成的注释,设置“//”开始位置

问题场景: IDEA中使用 ctrl/ 快捷键,//显示在最左边(顶格),不美观,中间隔了好长的空格,如图: 解决方法: 操作步骤 File–>Sttings–>Editor–>Code Style–>Java–>…

IDEA2024下安装kubernetes插件并配置进行使用

【1】安装插件 其实2024.2.3下默认已经安装了kubernetes插件,如果你发现自己IDEA中没有,在市场里面检索并下载即可。 【2】kubernetes配置 ① 前置工作 首先你要准备一个config文件和一个kubectl.exe 。 config文件类似如下: apiVersi…

H7-TOOL的CAN/CANFD助手增加帧发送成功标识支持, 继续加强完善功能细节

2.27版本固件正式携带此功能,包括之前做的负载率检测和错误信息展示也将集成到这个版本固件中。 对于接收,我们可以直接看到效果,而发送不行,所以打算在发送的地方展示下发送成功标识。CAN发送不像串口,需要等待应答后…

CSP/信奥赛C++刷题训练:经典广搜例题(4):洛谷P1746 :离开中山路

CSP/信奥赛C刷题训练:经典广搜例题(4):洛谷P1746 :离开中山路 题目背景 《爱与愁的故事第三弹shopping》最终章。 题目描述 爱与愁大神买完东西后,打算坐车离开中山路。现在爱与愁大神在 x 1 , y 1 x_1…

CST汽车天线仿真(双向混合求解)

CST从2018版本开始具有双向混合求解,到2019版已经通用微波工作室的各个求解器之间的双向混合。具体的混合对象如下图: 对天线的安装和耦合仿真,意味着对复杂结构(天线)和电大尺寸环境(安装平台,…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(下)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上) 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下) 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上) 【…

【HCIP园区网综合拓扑实验】配置步骤与详解(未施工完,持续更新中)

一、实验要求 实验拓扑图如上图所示 1、按照图示的VLAN及IP地址需求,完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan 4、上层通过静态路由协议完成数据通信过程 5、…

C++设计模式结构型模式———外观模式

文章目录 一、引言二、外观模式三、总结 一、引言 外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。也就是说,该模式的目的用于隔离接口,换句话说,就是扮演中间层的角色,把本来结合…

软件设计师:排序算法总结

一、直接插入 排序方式:从第一个数开始,拿两个数比较,把后面一位跟前面的数比较,把较小的数放在前面一位 二、希尔 排序方式:按“增量序列(步长)”分组比较,组内元素比较交换 假设…

vue输入中文,获取英文首字母缩写

背景:要求输入中文的时候,系统给出对应的首字母大写,作为拼音。 例如:输入“博客”,输出‘BK’ 等等…… 经查:使用 js-pinyin 这个第三方插件即可实现 1. 下载依赖 npm install js-pinyin 或者 yarn ad…

数据结构与算法--回溯法

回溯法 1 括号生成分析: 2 解数独分析代码 回溯法本质是的暴力枚举/遍历法,一般用递归实现。 当我们可以把问题分解为若干个步骤,每个步骤都有若干个选择的时候,若需要列出所有解答形式,则采用枚举法。 1 括号生成 数…

外卖小程序的研究与开发ssm+论文源码调试讲解

2系统关键技术 2.1微信小程序 微信小程序,简称小程序,英文名Mini Program,是一种全新的连接用户与服务的方式,可以快速访问、快速传播,并具有良好的使用体验。 小程序的主要开发语言是JavaScript,它与普通…

花了6000多考下PMP却不会用?你真的懂PMP实际用法吗?

大家都已经下载了PMP的电子版证书吗?虽然拿到了电子证书,但很多人又开始期待纸质版证书。不要着急,考试后需要6-9个月才能拿到纸质版证书,可能还需要等一段时间。 电子证书和纸质证书具有同样的有效性,需要使用证书时…

Spring面向切面编程

目录 1.AOP概述及Spring AOP实现原理 AOP概述 AOP的应用场景 AOP的作用 Spring AOP概述 Spring AOP的实现原理 Spring AOP中Advice的分类 2. 通过xml配置实现AOP 实现步骤: 新增模块: 导入相关依赖: 新增实体类User 新增业务类UserS…

Javaweb选课系统-开源计划-起源-001-完全免费开源

项目部署,效果视频 https://www.bilibili.com/video/BV1LMDUY8Ef7/?spm_id_from333.880.my_history.page.click&vd_source17d16b2e328f19328e077e9cb07565ef项目地址: https://gitee.com/lucky-six/Javaweb-xuanke

【简信CRM-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…