【数据库】MySQL常见聚合查询详解

在数据库操作中,聚合查询是非常重要的一部分。通过聚合查询,我们可以对数据进行汇总、统计和分析。MySQL提供了丰富的聚合函数来满足不同的需求。本文将详细介绍MySQL中常见的40个聚合函数及其使用场景,并通过8个的案例展示它们的用法。

一、聚合函数的概念

聚合函数是对一组值执行计算并返回单个值的函数。它们通常用于SELECT语句中,与GROUP BY子句一起使用,以便对数据进行分组和汇总。

二、常见的40个聚合函数

以下是MySQL中常见的40个聚合函数及其使用场景:

聚合函数描述使用场景
COUNT()返回行数统计记录数
SUM()返回数值列的总和计算总和
AVG()返回数值列的平均值计算平均值
MIN()返回列中的最小值查找最小值
MAX()返回列中的最大值查找最大值
GROUP_CONCAT()返回一组值的连接字符串将多行数据合并为一个字符串
STD()返回数值列的标准差计算标准差
VARIANCE()返回数值列的方差计算方差
BIT_AND()返回按位与运算的结果按位与运算
BIT_OR()返回按位或运算的结果按位或运算
BIT_XOR()返回按位异或运算的结果按位异或运算
JSON_ARRAYAGG()返回JSON数组将多行数据合并为JSON数组
JSON_OBJECTAGG()返回JSON对象将多行数据合并为JSON对象
VAR_POP()返回总体方差计算总体方差
VAR_SAMP()返回样本方差计算样本方差
STDDEV_POP()返回总体标准差计算总体标准差
STDDEV_SAMP()返回样本标准差计算样本标准差
COVAR_POP()返回总体协方差计算总体协方差
COVAR_SAMP()返回样本协方差计算样本协方差
CORR()返回相关系数计算相关系数
MEDIAN()返回中位数计算中位数
PERCENTILE_CONT()返回连续百分位数计算连续百分位数
PERCENTILE_DISC()返回离散百分位数计算离散百分位数
RANK()返回行的排名计算行的排名
DENSE_RANK()返回行的密集排名计算行的密集排名
ROW_NUMBER()返回行的序号计算行的序号
NTILE()返回行的分桶号计算行的分桶号
FIRST_VALUE()返回窗口中的第一个值获取窗口中的第一个值
LAST_VALUE()返回窗口中的最后一个值获取窗口中的最后一个值
LAG()返回前一行中的值获取前一行中的值
LEAD()返回后一行中的值获取后一行中的值
CUME_DIST()返回累积分布计算累积分布
PERCENT_RANK()返回百分比排名计算百分比排名
NTH_VALUE()返回窗口中的第N个值获取窗口中的第N个值
JSON_EXTRACT()返回JSON文档中的值提取JSON文档中的值
JSON_UNQUOTE()返回JSON文档中的未引用值提取JSON文档中的未引用值
JSON_CONTAINS()返回JSON文档是否包含指定值检查JSON文档是否包含指定值
JSON_CONTAINS_PATH()返回JSON文档是否包含指定路径检查JSON文档是否包含指定路径
JSON_KEYS()返回JSON文档中的键提取JSON文档中的键
JSON_LENGTH()返回JSON文档的长度计算JSON文档的长度

三、聚合查询的案例

1. 创建示例表

首先,我们创建一个示例表sales,用于演示各种聚合查询。

CREATE TABLE sales (id INT AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(50),quantity INT,price DECIMAL(10, 2),sale_date DATE
);INSERT INTO sales (product_name, quantity, price, sale_date) VALUES
('Apple', 10, 1.50, '2023-01-01'),
('Banana', 20, 0.50, '2023-01-01'),
('Apple', 15, 1.50, '2023-01-02'),
('Banana', 25, 0.50, '2023-01-02'),
('Orange', 30, 0.75, '2023-01-03'),
('Orange', 35, 0.75, '2023-01-04');

2. 使用COUNT()统计记录数

-- 统计总记录数
SELECT COUNT(*) AS total_records FROM sales;-- 统计不同产品的记录数
SELECT product_name, COUNT(*) AS product_count
FROM sales
GROUP BY product_name;

输出结果:

+---------------+
| total_records |
+---------------+
|             6 |
+---------------++--------------+---------------+
| product_name | product_count |
+--------------+---------------+
| Apple        |             2 |
| Banana       |             2 |
| Orange       |             2 |
+--------------+---------------+

3. 使用SUM()计算总和

-- 计算所有产品的总销售额
SELECT SUM(quantity * price) AS total_sales FROM sales;-- 计算每个产品的总销售额
SELECT product_name, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY product_name;

输出结果:

+-------------+
| total_sales |
+-------------+
|       83.75 |
+-------------++--------------+-------------+
| product_name | total_sales |
+--------------+-------------+
| Apple        |       37.50 |
| Banana       |       22.50 |
| Orange       |       48.75 |
+--------------+-------------+

4. 使用AVG()计算平均值

-- 计算所有产品的平均销售额
SELECT AVG(quantity * price) AS average_sales FROM sales;-- 计算每个产品的平均销售额
SELECT product_name, AVG(quantity * price) AS average_sales
FROM sales
GROUP BY product_name;

输出结果:

+---------------+
| average_sales |
+---------------+
|     13.958333 |
+---------------++--------------+---------------+
| product_name | average_sales |
+--------------+---------------+
| Apple        |        18.750 |
| Banana       |        11.250 |
| Orange       |        24.375 |
+--------------+---------------+

5. 使用MIN()MAX()查找最小值和最大值

-- 查找所有产品的最小和最大销售额
SELECT MIN(quantity * price) AS min_sales, MAX(quantity * price) AS max_sales
FROM sales;-- 查找每个产品的最小和最大销售额
SELECT product_name, MIN(quantity * price) AS min_sales, MAX(quantity * price) AS max_sales
FROM sales
GROUP BY product_name;

输出结果:

+-----------+-----------+
| min_sales | max_sales |
+-----------+-----------+
|     10.00 |     26.25 |
+-----------+-----------++--------------+-----------+-----------+
| product_name | min_sales | max_sales |
+--------------+-----------+-----------+
| Apple        |     15.00 |     22.50 |
| Banana       |     10.00 |     12.50 |
| Orange       |     22.50 |     26.25 |
+--------------+-----------+-----------+

6. 使用GROUP_CONCAT()合并字符串

-- 合并所有产品的名称
SELECT GROUP_CONCAT(product_name) AS all_products FROM sales;-- 合并每个销售日期的产品名称
SELECT sale_date, GROUP_CONCAT(product_name) AS products_sold
FROM sales
GROUP BY sale_date;

输出结果:

+---------------------------+
| all_products              |
+---------------------------+
| Apple,Banana,Apple,Banana,Orange,Orange |
+---------------------------++------------+---------------------+
| sale_date  | products_sold       |
+------------+---------------------+
| 2023-01-01 | Apple,Banana        |
| 2023-01-02 | Apple,Banana        |
| 2023-01-03 | Orange              |
| 2023-01-04 | Orange              |
+------------+---------------------+

7. 使用STD()VARIANCE()计算标准差和方差

-- 计算所有销售额的标准差和方差
SELECT STD(quantity * price) AS std_sales, VARIANCE(quantity * price) AS variance_sales
FROM sales;-- 计算每个产品销售额的标准差和方差
SELECT product_name, STD(quantity * price) AS std_sales, VARIANCE(quantity * price) AS variance_sales
FROM sales
GROUP BY product_name;

输出结果:

+------------+----------------+
| std_sales  | variance_sales |
+------------+----------------+
|   6.614378 |      43.750000 |
+------------+----------------++--------------+------------+----------------+
| product_name | std_sales  | variance_sales |
+--------------+------------+----------------+
| Apple        |   3.750000 |      14.062500 |
| Banana       |   1.250000 |       1.562500 |
| Orange       |   1.875000 |       3.515625 |
+--------------+------------+----------------+

8. 使用BIT_AND()BIT_OR()BIT_XOR()进行位运算

-- 计算quantity列的按位与、按位或和按位异或
SELECT BIT_AND(quantity) AS bit_and, BIT_OR(quantity) AS bit_or, BIT_XOR(quantity) AS bit_xor
FROM sales;

输出结果:

+---------+--------+---------+
| bit_and | bit_or | bit_xor |
+---------+--------+---------+
|       0 |     35 |      15 |
+---------+--------+---------+

四、总结

通过本文的介绍和案例,我们详细了解了MySQL中常见的聚合函数及其使用场景。这些聚合函数在数据分析和统计中非常有用,能够帮助我们快速获取数据的汇总信息。掌握这些聚合查询的技巧,将使你在数据库操作中更加得心应手。

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

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

相关文章

调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)

文章目录 调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)一、交互流程二、数据流程三、架构分类四、开源产品4.1 AutoCoder(知识库变体)4.2 FastGPT(…

【Vue CLI脚手架开发】——6.scoped样式

文章目录 一、scoped是什么二、应用案例1.使用代码2.原理3父组件App未添加scoped影响 一、scoped是什么 我们知道vue为了防止css样式污染&#xff0c;在每个组件中提供了 scoped属性进行限定css作用域&#xff1b;当<style>标签有 scoped 属性时&#xff0c;它的 CSS 只…

高精算法的用法及其优势

高精度问题是指当数据的位数非常大&#xff08;超出标准数据类型的范围&#xff09;时&#xff0c;如何进行计算和存储的问题。常见场景包括大整数的加、减、乘、除、取模等操作。以下是解决高精度问题的常用方法与技巧&#xff1a; 一、数据存储 数组存储 用整型数组存储&am…

VM+CentOS虚拟机

关于VMCentOS虚拟机的配置和使用&#xff0c;可以参考以下博客中的详细教程&#xff1a; **一、VMCentOS虚拟机配置** 1. **虚拟机网络配置** - 在VMware中&#xff0c;点击“编辑”→“虚拟网络编辑器”&#xff0c;选择VMnet8并进行相关设置。 - 子网IP可以改成如192.168.1…

设置 CursorRules 规则

为什么要设置CursorRules&#xff1f; 设置 CursorRules 可以帮助优化代码生成和开发流程&#xff0c;提升工作效率。具体的好处包括&#xff1a; 1、自动化代码生成 &#xff1a;通过定义规则&#xff0c;Cursor 可以根据你的开发需求自动生成符合规定的代码模板&#xff0c…

pip install速度太慢的多种解决方案

目录 问题描述为什么 pip 速度这么慢&#xff1f;解决方案1. 使用国内镜像源2. 配置多个镜像源3. 使用第三方工具4. 手动下载后本地安装5. 优化网络环境6. 更新 pip 版本 测试效果 问题描述 在使用 Python 进行开发时&#xff0c;我们经常需要使用 pip 来安装第三方库。然而&am…

Java阻塞队列深度解析:高并发场景下的安全卫士

一、阻塞队列的核心价值 在电商秒杀系统中&#xff0c;瞬时涌入的10万请求如果直接冲击数据库&#xff0c;必然导致系统崩溃。阻塞队列如同一个智能缓冲带&#xff0c;通过流量削峰和异步解耦两大核心能力&#xff0c;成为高并发系统的核心组件。 二、Java阻塞队列实现类对比 …

基于RapidOCR与DeepSeek的智能表格转换技术实践

基于RapidOCR与DeepSeek的智能表格转换技术实践 一、技术背景与需求场景 在金融分析、数据报表处理等领域&#xff0c;存在大量图片格式的表格数据需要结构化处理。本文介绍基于开源RapidOCR表格识别与DeepSeek大模型的智能转换方案&#xff0c;实现以下典型场景&#xff1a; …

django中视图作用和视图功能 以及用法

在 Django REST Framework(DRF)中,视图(View)是处理 HTTP 请求并返回响应的核心组件。DRF 提供了多种视图类,适用于不同的场景和需求。以下是 DRF 中常见的视图类及其作用、使用方法的详细说明: 一、DRF 视图的分类 DRF 的视图可以分为以下几类: 基于函数的视图(Func…

希音(Shein)前端开发面试题集锦和参考答案

用 Node 写过什么工具或 npm 包 在实际开发中,使用 Node 编写过多种实用工具和 npm 包。 自动化构建工具 开发了一个简单的自动化构建工具,用于处理前端项目的资源压缩和合并。在前端项目中,为了优化性能,需要对 CSS 和 JavaScript 文件进行压缩,减少文件体积,同时将多个…

C语言100天练习题【记录本】

C语言经典100题&#xff08;手把手 编程&#xff09; 可以在哔哩哔哩找到 已解决的天数&#xff1a;一&#xff0c;二&#xff0c;五&#xff0c;六 下面的都是模模糊糊的 可以学学这些算法&#xff0c;我是算法白痴&#xff0c;但是我不是白痴&#xff0c;可以学&#xff…

迷你世界脚本文字板接口:Graphics

文字板接口&#xff1a;Graphics 彼得兔 更新时间: 2024-08-27 11:12:18 具体函数名及描述如下: 序号 函数名 函数描述 1 makeGraphicsText(...) 创建文字板信息 2 makeflotageText(...) 创建漂浮文字信息 3 makeGraphicsProgress(...) 创建进度条信息…

Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取

Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取 在当今人工智能时代&#xff0c;网络爬虫扮演着至关重要的角色。它们不仅是数据收集的强大工具&#xff0c;更是驱动机器学习、自然语言处理等技术发展的关键引擎。 然而&#xff0c;对于用户来说&#xff0c;在面对复杂多…

下载b站视频音频

文章目录 方案一&#xff1a;jjdown如何使用 方案二&#xff1a;bilibili哔哩哔哩下载助手如何使用进入插件网站插件下载插件安装 使用插件下载视频音频&#xff1a;复制音频下载地址 方案三&#xff1a;bat命令下载单个音频下载单个视频下载单个音视频 方案一&#xff1a;jjdo…

【Git】linux搭建Gitea配置mysql数据库

WindowsServer搭建内网Gitea【中文更方便使用】 1. 安装Gitea # 下载 wget https://dl.gitea.io/gitea/1.23.5/gitea-1.23.5-linux-amd642. 创建用户 # 创建 gitea 用户 sudo adduser --system --shell /bin/bash --comment Git Version Control --create-home --home-dir /…

AI绘画软件Stable Diffusion详解教程(6):文生图、提示词细说与绘图案例

文生图即以文字描述来生成图像&#xff0c;这是目前所有AI绘画软件的基本功能之一。要想画一副好的图片&#xff0c;除了选择好的模型&#xff0c;在文生图中&#xff0c;提示词特别关键。 一、什么是提示词&#xff08;Prompt&#xff09; 提示词又称创意、关键词、咒语、ca…

MATLAB实现遗传算法优化风电_光伏_光热_储热优化

1. 问题定义 目标&#xff1a;最小化输出负荷与需求负荷的偏差平方和。决策变量&#xff1a;每个时间步长的风电、光伏、光热和储热输出功率。约束条件&#xff1a; 风电、光伏、光热的输出功率不得超过其最大容量。储热系统的输出功率&#xff08;充放电&#xff09;不得超过…

Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(一)

Ubuntu20.04本地配置IsaacLab的G1训练环境&#xff08;一&#xff09; 配置Omniverse环境配置IsaacSim配置IsaacLab 写在前面&#xff0c;如果Ubuntu剩余空间低于60G&#xff0c;则空间不足&#xff0c;除非你不需要资产包。但资产包中却包含了G1模型、Go2模型等机器人模型和代…

Linux文管读写书签

文件&#xff1a;~/.config/gtk-3.0/bookmarks 格式&#xff1a;file://路径 名称&#xff0c;每个一行。 QTreeWidgetItem清空item所有子节点 读取书签 void MainWindow::genBookmark() {QString fp QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) &…

芋道打包时报错:缺失@unocss插件

在遇到打包时&#xff0c;报这个错误&#xff0c;提示构建失败是因为 ESLint 在加载 unocss 插件时&#xff0c;找不到 unocss/eslint-plugin 模块 解决办法&#xff1a;安装缺失的依赖&#xff1a;保证unocss/eslint-plugin已经被正确安装&#xff0c; 使用以下命令安装&…