MySQL(8)【聚合函数 | group by分组查询】

阅读导航

  • 引言
  • 一、聚合函数
    • 1. 简介
    • 2. 使用示例
      • (1)COUNT() 函数
      • (2)SUM() 函数
      • (3)AVG() 函数
      • (4)MAX() 函数
      • (5)MIN() 函数
  • 二、group by分组查询
    • 1. 基本语法
    • 2. 按单个列分组
    • 3. 按多个列分组
    • 4. 结合聚合函数使用
    • 5. 使用 HAVING 过滤分组
      • 🚨🚨注意事项

引言

在之前的文章中,我们学习了MySQL中如何对表进行增删改查操作。这次,我们要更进一步,聊聊MySQL中的聚合函数和GROUP BY分组查询。

一、聚合函数

1. 简介

聚合函数它们允许我们对一组值执行计算并返回单个值。这些函数通常与SELECT语句一起使用,特别是在结合GROUP BY语句进行分组查询时,能够揭示出数据集合中的统计信息或总体特征。

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的数量。如果使用了DISTINCT,则计算不重复值的数量。
SUM([DISTINCT] expr)返回查询到的数据的总和(仅对数值类型有效)。如果使用了DISTINCT,则对不重复的值求和。
AVG([DISTINCT] expr)返回查询到的数据的平均值(仅对数值类型有效)。如果使用了DISTINCT,则对不重复的值计算平均值。
MAX([DISTINCT] expr)返回查询到的数据的最大值(可适用于数值、字符串、日期等类型)。如果使用了DISTINCT,则从不重复的值中找出最大值。
MIN([DISTINCT] expr)返回查询到的数据的最小值(可适用于数值、字符串、日期等类型)。如果使用了DISTINCT,则从不重复的值中找出最小值。

2. 使用示例

(1)COUNT() 函数

COUNT() 函数用于计算表中的行数或指定列中非NULL值的数量。

  • 计算表中的总行数

    SELECT COUNT(*) FROM table_name;
    

    这里,* 表示计算所有行,包括NULL值所在的行(因为COUNT(*)不区分NULL值)。

  • 计算指定列中非NULL值的数量

    SELECT COUNT(column_name) FROM table_name;
    

    如果column_name列中有NULL值,这些NULL值不会被计入总数。

  • 使用DISTINCT排除重复值

    SELECT COUNT(DISTINCT column_name) FROM table_name;
    

    这将计算column_name列中不同(非重复)值的数量。

(2)SUM() 函数

SUM() 函数用于计算数值列中所有值的总和。

  • 计算某列的总和

    SELECT SUM(column_name) FROM table_name;
    

    这里,column_name必须是数值类型,否则函数将返回错误或无意义的结果。

  • 结合WHERE子句进行条件求和

    SELECT SUM(column_name) FROM table_name WHERE condition;
    

    这将计算满足condition条件的column_name列的总和。

  • 使用DISTINCT排除重复值后再求和(虽然在实际应用中较少见,但理论上可行):

    SELECT SUM(DISTINCT column_name) FROM table_name;
    

    注意:在大多数情况下,对求和操作使用DISTINCT可能不是必要的,因为它会去除重复值,这可能会影响总和的计算结果。

(3)AVG() 函数

AVG() 函数用于计算数值列中所有值的平均值。

  • 计算某列的平均值

    SELECT AVG(column_name) FROM table_name;
    

    这里,column_name必须是数值类型。AVG()函数会自动忽略NULL值。

  • 结合WHERE子句进行条件平均值的计算

    SELECT AVG(column_name) FROM table_name WHERE condition;
    

    这将计算满足condition条件的column_name列的平均值。

(4)MAX() 函数

MAX() 函数用于找出某列中的最大值。

  • 找出某列的最大值

    SELECT MAX(column_name) FROM table_name;
    

    这里,column_name可以是数值类型、字符串类型或日期类型等。对于字符串类型,MAX()函数将按照字典序返回最大值。

(5)MIN() 函数

MIN() 函数用于找出某列中的最小值。

  • 找出某列的最小值

    SELECT MIN(column_name) FROM table_name;
    

    MAX()函数类似,column_name可以是多种数据类型,MIN()函数将返回该列中的最小值。

二、group by分组查询

1. 基本语法

SELECT column1, column2, ... FROM table GROUP BY column;

2. 按单个列分组

假设我们有一个名为 orders 的表,其中包含 customer_idorder_amount 两个字段,我们想要计算每个客户的订单总数。

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;

这个查询将返回每个 customer_id 及其对应的订单数量。

3. 按多个列分组

如果我们还想按订单状态(order_status)进一步细分每个客户的订单数,我们可以按两个列进行分组。

SELECT customer_id, order_status, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id, order_status;

这个查询将返回每个 customer_idorder_status 组合及其对应的订单数量。

4. 结合聚合函数使用

我们还可以结合不同的聚合函数来使用 GROUP BY,以获取更丰富的统计信息。

SELECT customer_id,
       AVG(order_amount) AS average_order_amount,
       MAX(order_amount) AS max_order_amount,
       MIN(order_amount) AS min_order_amount,
       SUM(order_amount) AS total_order_amount
FROM orders
GROUP BY customer_id;

这个查询为每个 customer_id 计算了平均订单金额、最大订单金额、最小订单金额和总订单金额。

5. 使用 HAVING 过滤分组

有时,我们可能想要基于聚合函数的结果来过滤分组。这时,我们可以使用 HAVING 子句。

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 1;

这个查询返回了订单数大于 1 的 customer_id 及其订单数。

🚨🚨注意事项

  • 当使用 GROUP BY 时,SELECT 列表中的每个非聚合列都必须是 GROUP BY 子句中指定的列。
  • 聚合函数(如 COUNT(), SUM(), AVG(), MAX(), MIN())可以对分组后的数据进行计算。
  • HAVING 子句用于过滤分组后的结果,而 WHERE 子句用于过滤分组前的行。
  • SQL查询中各个关键字的执行先后顺序FROM & JOIN & ON > WHERE > GROUP BY > SELECT & DISTINCT > HAVING > ORDER BY > LIMIT

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在线音乐播放器 —— 测试报告

自动化脚本源代码:Java: 利用Java解题与实现部分功能及小项目的代码集合 - Gitee.com 目录 前言 一、项目简介 1.项目背景 2.应用技术 (1)后端开发 (2)前端开发 (3)数据库 二、项目功能…

TCP/IP协议攻击与防范

一、TCP/IP协议攻击介绍 1.1 Internet的结构​ LAN:局域网 WAN:广域网 WLAN:无线局域网 私有IP地址与公有IP地址? 私有地址:A类:10.0.0.0~10.255.255.255 B类:172.16.0.0~172.31.255.255…

Unity ShaderLab 实现3D物体描边

实现思路: 给物体添加第二个材质球,在shader的顶点着色器中使顶点的位置变大,然后在片元着色器中输出描边颜色。 shader Graph实现如下: ShaderLab实现如下: Shader "Custom/Outline" {Properties{[HDR]_…

复合查询和内外连接

文章目录 1. 简单查询2. 多表查询2.1 显示雇员名、雇员工资以及所在部门的名字2.2 显示部门号为10的部门名,员工名和工资2.3 显示各个员工的姓名,工资,及工资级别 3. 自连接4. 子查询4.1 where后的子查询4.1.1 单行子查询4.1.2 多行子查询 (i…

java八股-分布式服务的接口幂等性如何设计?

文章目录 接口幂等token Redis分布式锁 原文视频链接:讲解的流程特别清晰,易懂,收获巨大 【新版Java面试专题视频教程,java八股文面试全套真题深度详解(含大厂高频面试真题)】 https://www.bilibili.com/…

Windows Serv 2019 虚拟机 安装Oracle19c,图文详情(超详细)

1、下载安装文件 Oracle官网下载直链:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_ee 夸克网盘下载:https://pan.quark.cn/s/1460a663ee83 2、新建 Windows Server 2019 虚拟机 (超详细&a…

时间的礼物:如何珍视每一刻

《时间的礼物:如何珍视每一刻》 夫时间者,宇宙之精髓,生命之经纬,悄无声息而流转不息,如织锦之细线,串联古今,贯穿万物。 人生短暂,犹如白驹过隙,倏忽而逝,…

FreeRTOS之vTaskStartScheduler实现分析

FreeRTOS之vTaskStartScheduler实现分析 1 FreeRTOS源码下载地址2 函数接口2.1 函数接口2.2 函数参数简介3 vTaskDelete的调用关系3.1 调用关系3.2 调用关系示意图 4 函数源码分析4.1 vTaskStartScheduler4.2 prvCreateIdleTasks4.2.1 prvCreateIdleTasks4.2.2 xTaskCreate 4.3…

NLP论文速读(EMNLP2024)|多风格可控生成的动态多奖励权重

论文速读|Dynamic Multi-Reward Weighting for Multi-Style Controllable Generation 论文信息: 简介: 本文探讨了文本风格在沟通中的重要性,指出文本风格传达了除原始语义内容之外的多种信息,如人际关系动态(例如正式…

【AI】Sklearn

长期更新,建议关注、收藏、点赞。 友情链接: AI中的数学_线代微积分概率论最优化 Python numpy_pandas_matplotlib_spicy 建议路线:机器学习->深度学习->强化学习 目录 预处理模型选择分类实例: 二分类比赛 网格搜索实例&…

Dockerfile打包部署

Dockerfile打包 先找到打包完的目录下创建一个Dockerfile文件 touch Dockerfile 进去文件内编写 vim Dockerfile # 基础镜像 FROM openjdk:8 # author MAINTAINER yxh # 挂载目录 VOLUME /home/project # 创建目录 RUN mkdir -p /home/project # 指定路径 WORKDIR /home/pr…

鸿蒙学习使用模拟器运行应用(开发篇)

文章目录 1、系统类型和运行环境要求2、创建模拟器3、启动和关闭模拟器4、安装应用程序包和上传文件QA:在Windows电脑上启动模拟器,提示未开启Hyper-V 1、系统类型和运行环境要求 Windows 10 企业版、专业版或教育版及以上,且操作系统版本不低于10.0.18…

数组学习后记——递归

数组这块学得有点乱,条理性欠佳。这次正好总结一下。上周的课堂内容没有更新, 因为小白自己也还没来得及吸收呢qwq。也解释一下为什么文中有这么多例题。因为我呢喜欢就着题去分析和学习,直接灌输知识不太能理解,有例子就能及时检验和应用了的。 先看看B3817 基础的双数组…

每天五分钟深度学习:神经网络的前向传播的计算过程(单样本)

本文重点 本节课程我们学习神经网络的输出是如何计算的,这个过程叫做神经网络的前向传播。 神经网络的结构 如上所示是一个具有单隐藏层的神经网络,其中输入层不算神经网络的层数。 在这个神经网络中,x表示输入特征,a表示每个神经元的输出,W表示权重参数。 神经网络的…

C++——多态(下)

目录 引言 多态 4.多态的原理 4.1 虚函数表指针 4.2 多态的原理 5.单继承和多继承关系的虚函数表 5.1 单继承中的虚函数表 5.2 多继承中的虚函数表 结束语 引言 接下来我们继续学习多态。 没有阅读多态(上)的可以点击下面的链接哦~ C——多态…

【CSS in Depth 2 精译_061】9.4 CSS 中的模式库 + 9.5 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第九章 CSS 的模块化与作用域】 ✔️ 9.1 模块的定义 9.1.1 模块和全局样式9.1.2 一个简单的 CSS 模块9.1.3 模块的变体9.1.4 多元素模块 9.2 将模块组合为更大的结构 9.2.1 模块中多个职责的拆分…

DHCP服务(包含配置过程)

目录 一、 DHCP的定义 二、 使用DHCP的好处 三、 DHCP的分配方式 四、 DHCP的租约过程 1. 客户机请求IP 2. 服务器响应 3. 客户机选择IP 4. 服务器确定租约 5. 重新登录 6. 更新租约 五、 DHCP服务配置过程 一、 DHCP的定义 DHCP(Dynamic Host Configur…

技术实践 | AI 安全:通过大模型解决高危WEB应用识别问题

一、引言 在日常企业安全能力建设中,收敛企业外网高危资产,以保障公司外部安全是企业安全的重要工作。WEB 高危服务(如:管理后台、内部系统等)外开是企业所面临的一个重要风险。针对该风险,传统的方式是基…

C 语言函数递归探秘:从基础概念到复杂问题求解的进阶之路

我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 什么是函数递归递归的基本组成递归的工作原理递归的优缺点递归的经典案例 5.1 阶乘计算5.2 斐波那契数列5.3 汉诺塔问题5.4 二分查找 递归的高级…

多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测

多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现…