汇总数据(使用聚集函数)

发布于:2025-07-30 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

聚集函数

为什么需要聚合函数?

AVG() 平均值函数

COUNT() 计数函数

MAX() 最大值函数

MIN() 最小值函数

SUM() 求和函数

聚集不同值(DISTINCT)


聚集函数

聚集函数用于将多行数据汇总为一个结果。常用于:
统计行数(如符合某条件的数量)
求某列的最大值、最小值、平均值或总和等
生成分析报告或汇总结果

为什么需要聚合函数?

在处理数据时,经常需要汇总信息,比如统计总数、求和、求平均值等,而不是获取原始数据本身。
例如:
老板问公司总共有多少员工?→ 需要统计行数(聚合函数 COUNT())
财务问这个月总销售额是多少?→ 需要求和(聚合函数 SUM())
HR问员工平均工资是多少?→ 需要求平均值(聚合函数 AVG())
这些场景下只需要汇总结果,不需要把所有原始数据(比如每个员工的工资明细)都查出来。

比如有一张 orders 表,记录了所有订单的金额:

order_id amount
1 100
2 200
3 300

如果不用聚合函数:
就需要先查询所有订单的 amount,再在程序中手动累加求和,低效且麻烦。
如果用聚合函数:
直接写 SELECT SUM(amount) FROM orders,数据库会直接返回 600,一步到位。

SQL 提供了 5 个常用聚集函数:

函数 说明
AVG() 求平均值
COUNT() 统计行数
MAX() 返回最大值
MIN() 返回最小值
SUM() 求总和

AVG() 平均值函数

用法:SELECT AVG(column) FROM 表名;

可返回整列或某一条件下的平均值。

要求:统计所有商品的平均价格

SELECT AVG(prod_price) AS avg_price 
FROM products;

带条件过滤:

要求:查询供应商ID为 100 的产品的平均价格

SELECT AVG(prod_price) AS avg_price
FROM products
WHERE vend_id = 100;

AVG() 只能用于数值列

自动忽略 NULL 值

COUNT() 计数函数

用法:
COUNT(*):统计所有行数(包括 NULL)
COUNT(column):只统计非 NULL 值的行数

要求:统计 products 表中商品的总数量

SELECT COUNT(*) AS num_prod FROM products;

要求:统计 products 表中价格不为空的商品数量

SELECT COUNT(prod_price) AS num_prod FROM products;

MAX() 最大值函数

用法:SELECT MAX(column) FROM 表名;

要求:查询所有商品中的最高价格

SELECT MAX(prod_price) AS max_price FROM products;

忽略 NULL
可用于非数值类型(如日期、字符串)
使用于非数值时依赖排序规则

字符集是用于定义数据库中字符串数据的编码方式,决定了如何存储和表示文字。
排序规则是一种定义字符数据排序和比较规则的机制。

数据库使用 utf8mb4 字符集可以存储中文、英文、日文、韩文 以及 emoji 表情。
utf8mb4_unicode_ci 排序规则中,'a' 和 'A' 被视为相等(不区分大小写)
utf8mb4_bin 排序规则中,'a' 和 'A' 被视为不同,'a' 小于 'A'(区分大小写)

MIN() 最小值函数

与 MAX() 相反,返回最小值;

要求:查询所有商品中的最低价格

SELECT MIN(prod_price) AS min_price FROM products;

MIN() 也可用于非数值列并且会忽略 NULL 值

SUM() 求和函数

用法:SELECT SUM(column) FROM 表;

SELECT SUM(quantity) AS items_ordered
FROM orderItems
WHERE order_num = 001;
SELECT SUM(item_price*quantity) AS total_price
FROM orderItems
WHERE order_num = 001;

可用于表达式
忽略 NULL 值

聚集不同值(DISTINCT)

聚集函数默认是对所有值(包括重复)进行聚合
使用 DISTINCT 可只对不重复值聚合

SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 100;

DISTINCT 不能用于 COUNT(*),但可用于 COUNT(column)

COUNT(*) 统计的是行的数量,DISTINCT 作用于具体的列用于判断列值是否重复。如果写成 COUNT(DISTINCT *),无法确定基于哪些列去重


网站公告

今日签到

点亮在社区的每一天
去签到