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

news/2024/11/29 4:54:41/

阅读导航

  • 引言
  • 一、聚合函数
    • 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

http://www.ppmy.cn/news/1550811.html

相关文章

【案例学习】如何使用Minitab实现包装过程的自动化和改进

Masimo 是一家全球性的医疗技术公司,致力于开发和生产各种行业领先的监控技术,包括创新的测量、传感器和患者监护仪。在 Masimo Hospital Automation 平台的助力下,Masimo 的连接、自动化、远程医疗和远程监控解决方案正在改善医院内外的护理…

多线程 相关面试集锦

什么是线程? 1、线程是操作系统能够进⾏运算调度的最⼩单位,它被包含在进程之中,是进程中的实际运作单位,可以使⽤多线程对 进⾏运算提速。 ⽐如,如果⼀个线程完成⼀个任务要100毫秒,那么⽤⼗个线程完成改…

rustdesk 自建服务

RustDesk 部署RustDesk sudo docker image pull rustdesk/rustdesk-server sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v pwd:/root -td --nethost rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -p 2111…

HTML 表单实战:从创建到验证

HTML表单是用于收集用户输入数据的一种方式&#xff0c;可以用于创建各种类型的表单&#xff0c;例如登录表单、注册表单、调查问卷表单等。本文将详细介绍表单元素的使用&#xff0c;并利用JavaScript实现对表单数据的验证。 HTML表单元素的使用 输入框<input> <i…

大语言模型---Llama不同系列的权重参数文件提取;Llama-7B权重文件提取;Llama-8B权重文件提取;主要代码功能解析

文章目录 1. 概要2. Llama-7B权重文件提取3. Llama-8B权重文件提取4. 主要代码功能解析 1. 概要 Llama 系列模型&#xff08;Meta 发布的大语言模型&#xff09;在开源社区广受欢迎&#xff0c;不同版本&#xff08;前文已经介绍过7B和8B的区别&#xff0c;详情请点击链接&…

2024年华为OD机试真题-路灯照明问题-Python-OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 在一条笔直的公…

英语知识网站开发:Spring Boot框架应用

3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架&#xff0c;JAVA作为开发语…

day2全局注册

全局注册代码&#xff1a; //文件核心作用&#xff1a;导入App.vue,基于App.vue创建结构渲染index.htmlimport Vue from vue import App from ./App.vue //编写导入的代码&#xff0c;往代码的顶部编写&#xff08;规范&#xff09; import HmButton from ./components/Hm-But…