MySQL的聚合函数是用于对一组值进行计算并返回单个汇总结果的函数,这类函数通常和GROUP BY子句配合使用,也可以单独用于全表数据的统计。常见的聚合函数包括COUNT、SUM、AVG、MAX、MIN五种,每种函数都有特定的适用场景。

COUNT函数
COUNT函数用于统计符合条件的记录行数,它有两种常见的使用形式:COUNT(*)和COUNT(列名)。COUNT(*)会统计所有行,包括值为NULL的行;COUNT(列名)只会统计该列值不为NULL的行。
-- 统计用户表的总行数 SELECT COUNT(*) AS total_user FROM user; -- 统计用户表中邮箱不为空的行数 SELECT COUNT(email) AS has_email_user FROM user;
SUM函数
SUM函数用于计算指定列的数值总和,只能用于数值类型的列,会忽略列值为NULL的行。如果列中所有值都是NULL,SUM函数会返回NULL。
-- 统计所有订单的总金额 SELECT SUM(order_amount) AS total_amount FROM order_table;
AVG函数
AVG函数用于计算指定列的数值平均值,计算时会忽略NULL值,实际计算的是非NULL值的总和除以非NULL值的个数。如果列中所有值都是NULL,AVG函数会返回NULL。
-- 统计所有商品的平均价格 SELECT AVG(price) AS avg_price FROM product;
MAX函数
MAX函数用于返回指定列的最大值,适用于数值、字符串、日期时间等类型的列,会忽略NULL值。如果是字符串类型,会按照字符集的排序规则比较大小。
-- 查询订单中的最大金额 SELECT MAX(order_amount) AS max_amount FROM order_table; -- 查询最新的订单创建时间 SELECT MAX(create_time) AS latest_time FROM order_table;
MIN函数
MIN函数用于返回指定列的最小值,适用类型和MAX函数一致,同样会忽略NULL值。
-- 查询订单中的最小金额 SELECT MIN(order_amount) AS min_amount FROM order_table;
使用注意事项
- 聚合函数默认会作用于所有符合条件的行,如果需要分组统计,需要搭配GROUP BY子句使用。
- 除了COUNT(*)之外,其他聚合函数都会忽略NULL值,编写查询时需要注意这个特性,避免统计结果不符合预期。
- 聚合函数不能直接用在WHERE子句中,如果需要筛选聚合后的结果,要使用HAVING子句。
-- 分组统计每个用户的订单总数,只保留订单数大于5的用户 SELECT user_id, COUNT(*) AS order_count FROM order_table GROUP BY user_id HAVING order_count > 5;