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