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

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 的旅程就像探险一样,充满了惊喜与成就感,愿你在这条数据之路上越走越远,开心又充实!🎈

相关文章:

MySQL_聚合函数分组查询

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

PPT 制作神器!Markdown 轻松变幻灯片!

做过幻灯片的朋友们都知道,PPT 的制作常常是费时费力的工作。尤其是需要不断调整布局和设计的时候。 而现在,GitHub 上有一款开源免费的 PPT 制作工具 moffee,能够极大地简化这一过程。你只需通过简单的 Markdown 编写内容,即可快…...

一七八、Node.js PM2使用介绍

PM2 是一个强大的生产级 Node.js 进程管理器,提供了自动重启、负载均衡和进程监控等功能。适用于开发和生产环境,简化了 Node.js 应用程序的管理和维护。 PM2 安装 1. 使用 npm 安装 PM2 npm i -g pm2latest-g:全局安装。latest&#xff1a…...

基于CSU18M92芯片的蓝牙体重秤方案

传统体重秤只有一个数据的显示功能,将需称重物体放置在体重秤上,体重秤显示当前物体的数据,物体移开,数据消失,体重秤没有数据记录、存储、分析功能。智能体重秤与传统体重秤相比,可通过低功耗蓝牙与手机AP…...

深度学习经典模型之VGGNet

1 VGGNet 1.1 模型介绍 ​ VGGNet是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以7.32%的错误率赢得了2014年ILSVRC分类任务的亚军(冠军由GoogLeNet以6.65%的错误率夺得)和…...

Axure网络短剧APP端原型图,竖屏微剧视频模版40页

作品概况 页面数量:共 40 页 使用软件:Axure RP 9 及以上,非软件无源码 适用领域:短剧、微短剧、竖屏视频 作品特色 本作品为网络短剧APP的Axure原型设计图,定位属于免费短剧软件,类似红果短剧、河马剧场…...

ES + SkyWalking + Spring Boot:日志分析与服务监控(三)

目录 一、搭建SkyWalking 1.1 版本选择 1.2 下载安装 1.3 配置启动 1.4 SkyWalking UI介绍 二、Springboot项目使用 2.1 Agent下载 2.2 Agent配置skywalking oap地址 2.3 IDEA配置Agent地址 2.4 生成的ES索引介绍 三、在kibana上查看日志 四、问题和解决 3.1 日志…...

php 如何将数组转成对象数组

1. 使用 (object) 操作符: “php $array [‘name’ > ‘John’, ‘age’ > 25]; $object (object) $array; // 访问对象属性 echo $object->name; // 输出: John echo $object->age; // 输出: 25 “ 2. 使用 (stdClass): “php $array …...

HTB:Photobomb[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行端口开放扫描 再次使用nmap对靶机开放端口进行脚本、服务扫描 使用ffuf进行简单的子域名扫描 使用浏览器直接访问该域名 选取一个照片进行下载,使用Yakit进行抓包 USER_FLAG:a9afd9220ae2b5731…...

图文组合-pytorch实现

在图文组合任务中,常见的图文融合方式有多种,比如简单的拼接、加权求和、注意力机制、跨模态Transformer等。为了让图片充分补充文本的语义信息,我们可以使用一种简单且有效的图文融合方法,比如通过注意力机制。 我们可以让文本特…...

CentOS AppStream 8 手动更新 yum源

由于CentOS 8的官方支持已在2021年12月31日结束,官方镜像中的CentOS 8包已被移除。因此,如果您仍然需要运行CentOS 8并更新其yum源,您可以考虑使用以下步骤来配置一个可用的yum源,例如阿里云的镜像源。 https://mirrors.aliyun.co…...

虚拟化环境中香港服务器内存如何分配与管理?

虚拟化技术通过创建抽象层来模拟硬件资源,使得可以在单一硬件上运行多个操作系统实例。这通常涉及两个主要组件:管理程序(Hypervisor)和虚拟机监控器(VMM)。管理程序直接安装在物理硬件上,负责创建和管理虚拟机,而VMM则用于监控和…...

Android源码中如何编译出fastboot.exe和adb.exe程序

1、方案背景说明 在进行android项目开发时,如果通用的fastboot工具无法满足项目的定制话的需求时,就需要对fastboot工具的源码进行自定义修改,并编译成新的fastboot和adb工具。 由于安卓源码的的编译通常使用的是ubuntu系统,默认…...

C++ 参数传递 笔记

目录 1、输入参数的传递方式-选择传值还是传引用? 处理用户信息 处理坐标 处理配置 处理ID 2、对于需要修改的参数,使用非const引用传递 有趣的例外:警惕表象的迷惑 需要警惕的陷阱 “糟糕”的update方法: “完美”的set_name与set…...

【Linux】注释和配置文件的介绍

目录 一、help vim-modes指令 二、vim命令模式下的注释 1、直接注释: 2、快捷键注释(比较麻烦,了解即可) 三、vim的配置文件 .vimrc 四、sudo指令的相关问题 一、help vim-modes指令 在底行模式输入该指令可以用于查看vim的十…...

安卓主板_基于联发科MTK MT8788平台平板电脑方案_安卓核心板开发板定制

联发科MT8788安卓核心板平台介绍: MTK8788设备具有集成的蓝牙、fm、wlan和gps模块,是一个高度集成的基带平台,包括调制解调器和应用处理子系统,启用LTE/LTE-A和C2K智能设备应用程序。该芯片集成了工作在2.0GHz的ARM Cortex-A73、最…...

CLIP(Contrastive Language-Image Pre-Training)在SOPHON BM1684X上进行推理

1、链接 https://github.com/sophgo/sophon-demo/tree/release/sample/CLIP2、开发环境中交叉编译生成sophon_arm-3.8.0-py3-none-any.whl 3、sail安装 算能官网技术资料中SDK-24.04.01的 libsophon_soc_0.4.1_aarch64.tar.gz sophon-mw-soc_0.4.1_aarch64.tar.gz SOPHON-SA…...

Ascend Extension for PyTorch的源码解析

1 源码下载 Ascend对pytorch代码的适配,可从以下链接中获取。 Ascend/pytorch 执行如下命令即可。 git clone https://gitee.com/ascend/pytorch.git2 目录结构解析 源码下载后,如果需要编译torch-npu,最好保持pytorch的源码版本匹配&…...

鸿蒙HarmonyOS开发:给应用添加基础类型通知和进度条类型通知(API 12)

文章目录 一、通知介绍1、通知表现形式2、通知结构3、请求通知授权 二、创建通知1、发布基础类型通知2、发布进度类型通知3、更新通知4、移除通知 三、设置通知通道1、通知通道类型 四、创建通知组五、为通知添加行为意图1、导入模块。2、创建WantAgentInfo信息。4、创建WantAg…...

从零开始使用YOLOv11——Yolo检测detect数据集自建格式转换为模型训练格式:20w+图片1w+类别代码测试成功

在之前的文章中记录了YOLO环境的配置安装和基本命令的一些使用,上一篇博文的地址快速链接:从零开始使用YOLOv8——环境配置与极简指令(CLI)操作:1篇文章解决—直接使用:模型部署 and 自建数据集&#xff1a…...

自动化新时代:机器取代工作,我们该如何重塑自我?

内容概要 在自动化时代的浪潮中,技术的飞速发展对传统工作模式产生了深远影响。我们眼前浮现的是一个充满机遇与挑战的新世界。许多岗位面临被机器取代的威胁,然而,这一变化并不仅仅是消极的。在这个背景下,个体不仅需要重新审视…...

GEE 土地分类——利用Sentinel-2数据进行土地分类

目录 简介 函数 ee.Classifier.smileRandomForest(numberOfTrees, variablesPerSplit, minLeafPopulation, bagFraction, maxNodes, seed) Arguments: Returns: Classifier 代码 结果 简介 利用Sentinel-2数据进行土地分类的流程大致可分为以下几个步骤: 1. 数据获取…...

《C++ 游戏开发》

一、引言 在当今的数字娱乐时代,游戏开发已经成为一个充满活力和创新的领域。C 作为一种强大的编程语言,在游戏开发中占据着重要的地位。它具有高效的性能、丰富的功能和广泛的适用性,能够满足游戏开发中对性能和灵活性的高要求。本文将深入探…...

2024年11月10日系统架构设计师考试题目回顾

案例分析 试题一:质量属性 基于描述填空是什么质量属性,常规题。(性能,功能,安全,可用等等)可用性而言,王工建议采用 ping/echo 机制检测,不过从资源使用角度&#xff…...

测试实项中的偶必现难测bug--苹果支付丢单问题

问题描述: app支付后,由于某种原因(可能是网络、流量不稳定、或者用户快速频繁操作。。。)会造成一定概率性的回调苹果支付结果失败的情况出现,表现的直观现象就是客户反馈已经支付了,包括苹果支付也是有记录,但是我们的后台显示的是已取消状态的订单 验证难点:测试和…...

Elasticsearch的数据类型

Elasticsearch(简称 ES)支持多种数据类型,主要分为以下几类: 1. 基本数据类型 Text:用于全文搜索的文本字段。ES 会对其内容进行分词处理。Keyword:适用于精确匹配的字段,例如名称、标签等。ES 不会对其内容分词处理。Integer:整数类型,包括 byte、short、integer 和…...

SSL 证书申请以及配置流程

SSL 证书申请以及配置流程 手动申请免费 SSL 证书的简明指南 如果你希望手动为你的网站申请免费的 SSL 证书,Let’s Encrypt 提供了一个很棒的免费服务。而 Certbot 则是官方推荐的工具,可以帮助你完成证书的申请和配置。以下是如何一步步完成的详细说…...

[Docker#4] 镜像仓库 | 部分常用命令

目录 什么是 Docker Registry 镜像仓库生活案例 镜像仓库分类 镜像仓库工作机制 常用的镜像仓库 私有仓库 镜像仓库命令 镜像命令[部分] 容器命令[部分] 什么是 Docker Registry 定义:Docker Registry 负责存储、管理和分发镜像,并提供了登录认…...

工业通信协议对比:OPC-UA、Modbus、MQTT、HTTP

综合对比表 对比项OPC-UAModbusMQTTHTTP通信效率低,带宽消耗高高高,开销低,效率高低,带宽消耗大实时性一般,延迟较高高,延迟低高,低延迟低,延迟高性能消耗高,需要高性能…...

docker 常用方法

目录 docker参数解释 基础信息和环境变量设置 容器运行和管理相关参数 数据卷挂载 GPU 相关参数 镜像相关参数 查看现有的镜像 docker images 查看正在运行的docker docker ps 1、docker启动停止及查看状态 启动docker: systemctl start docker 停止docker…...

关于企业网站建设的提案/关键词搜索推广

http://www.docin.com/p-210901712.html转载于:https://blog.51cto.com/260505/778487...

提供网站建设公司电话/代运营网店公司

同冒泡排序一样,快速排序也属于交换排序,通过交换元素之间的位置来达到排序的目的。不同的是,冒泡排序在每一轮中只把1个元素冒泡到数列的一端,而快速排序则在每一轮挑选一个基准元素,并让比他大的元素移动到数列一边&…...

大石桥网站建设公司/百度seo什么意思

1、索引的目的是加快检索 2、但对于增删改行为则增加了时间,因为需要在同时在原表和索引表中添加纪录 创建索引 转载于:https://www.cnblogs.com/wang666/p/7921887.html...

网站做服装那个平台好一点/seo自学网免费

一、Dev cppDev cpp是一个C&C开发工具,使用Delphi/kylix开发,它是一款自由软件,遵守GPL协议。它集合GCC、MinGW等众多自由软件。它使用MinGW/GCC/Cygwin编译器,遵循C/C标准。开发环境包括多页面窗口、工程编译器及调试器等&am…...

做网站和做产品/360竞价推广

十三、主从服务器的配置的原理DNS服务器为了确保安全性、冗余性、负载均衡性,一般会设置主从服务器。这里的主从服务器是相对于区域而言的。假设有两台服务器A、B提供DNS服务,A服务器可以作为正向区域的主,B服务器可以作为正向区域的从&#…...

做英文网站公司/网站开发框架

转载于:https://www.cnblogs.com/fanweisheng/p/11236228.html...