MySQL 聚合函数
聚合函数对一组值执行计算,返回单个汇总值,常用于统计分析。
常用聚合函数
| 函数 | 说明 | 示例 |
|---|---|---|
| COUNT() | 计数 | COUNT(*) |
| SUM() | 求和 | SUM(score) |
| AVG() | 平均值 | AVG(price) |
| MAX() | 最大值 | MAX(score) |
| MIN() | 最小值 | MIN(score) |
COUNT 计数
SQL
-- 创建示例表
CREATE TABLE orders (
id INT PRIMARY KEY,
customer VARCHAR(50),
amount DECIMAL(10, 2),
status VARCHAR(20)
);
INSERT INTO orders VALUES
(1, '张三', 100, 'paid'),
(2, '李四', 200, 'paid'),
(3, '张三', 150, 'pending'),
(4, '王五', NULL, 'paid');
-- 统计所有行数
SELECT COUNT(*) AS 总数 FROM orders;
-- 统计非NULL值数量
SELECT COUNT(customer) AS 客户数 FROM orders;
SELECT COUNT(amount) AS 有金额数 FROM orders;
-- 统计不重复值数量
SELECT COUNT(DISTINCT customer) AS 不同客户数 FROM orders;
SUM 求和
SQL
-- 求和
SELECT SUM(amount) AS 总金额 FROM orders;
-- 条件求和
SELECT SUM(amount) AS 已支付金额
FROM orders WHERE status = 'paid';
-- 表达式求和
SELECT SUM(amount * 1.1) AS 含税总额 FROM orders;
AVG 平均值
SQL
-- 平均值
SELECT AVG(amount) AS 平均金额 FROM orders;
-- 保留小数位数
SELECT ROUND(AVG(amount), 2) AS 平均金额 FROM orders;
-- 条件平均
SELECT AVG(amount) AS 平均金额
FROM orders WHERE status = 'paid';
MAX 和 MIN
SQL
-- 最大值和最小值
SELECT MAX(amount) AS 最大金额, MIN(amount) AS 最小金额
FROM orders;
-- 获取最高金额的订单
SELECT * FROM orders WHERE amount = (SELECT MAX(amount) FROM orders);
组合使用
SQL
-- 一次查询多个统计值
SELECT
COUNT(*) AS 订单数,
COUNT(DISTINCT customer) AS 客户数,
SUM(amount) AS 总金额,
AVG(amount) AS 平均金额,
MAX(amount) AS 最大金额,
MIN(amount) AS 最小金额
FROM orders;
聚合函数忽略 NULL 值,COUNT(*) 除外。
要点总结
- COUNT(*) 统计所有行,COUNT(列) 统计非NULL值
- SUM 和 AVG 只适用于数值类型
- 聚合函数忽略 NULL 值
- 可与 DISTINCT 配合统计不重复值
📝 发现内容有误?点击此处直接编辑