在实际业务中,查询数据并不只是把记录查出来,还经常需要做统计。例如统计用户总数、订单总金额、每个分类下有多少条记录等。这类查询通常会用到聚合函数和 GROUP BY。
COUNT() 用于统计记录数量。
例如统计用户总数:
SELECT COUNT(*) AS total_users
FROM user;
也可以统计某个字段非空的数量:
SELECT COUNT(mobile) AS total_mobile
FROM user;
在大多数普通统计场景里,COUNT(*) 是最常见的写法。
SUM() 用于求和。
例如统计订单总金额:
SELECT SUM(amount) AS total_amount
FROM orders;
它适合:
AVG() 用于计算平均值。
例如计算商品平均价格:
SELECT AVG(price) AS avg_price
FROM product;
这在统计分析、报表展示中很常见。
MAX() 用于获取最大值,MIN() 用于获取最小值。
例如:
SELECT MAX(price) AS max_price
FROM product;
SELECT MIN(price) AS min_price
FROM product;
它们常用于:
GROUP BY 用于分组统计。
例如按城市统计用户数量:
SELECT city, COUNT(*) AS total_users
FROM user
GROUP BY city;
它的作用是把 city 相同的记录归为一组,然后对每组做统计。
再例如按月份统计订单数量:
SELECT DATE_FORMAT(created_at, '%Y-%m') AS month_name, COUNT(*) AS total_orders
FROM orders
GROUP BY DATE_FORMAT(created_at, '%Y-%m');
HAVING 用于对分组后的结果继续筛选。
例如只保留用户数量大于 10 的城市:
SELECT city, COUNT(*) AS total_users
FROM user
GROUP BY city
HAVING COUNT(*) > 10;
它和 WHERE 的区别可以简单理解为:
WHERE:先筛选记录,再分组HAVING:先分组统计,再筛选分组结果因此像 COUNT(*) > 10 这类条件,通常要写在 HAVING 中。
聚合函数解决“怎么算总数、总和、平均值、最大值、最小值”,GROUP BY 解决“按什么维度统计”,HAVING 解决“分组后如何筛选”。它们是报表和统计查询的基础。