Skip to content

Latest commit

 

History

History
120 lines (78 loc) · 2.35 KB

File metadata and controls

120 lines (78 loc) · 2.35 KB

统计函数和分组查询

在实际业务中,查询数据并不只是把记录查出来,还经常需要做统计。例如统计用户总数、订单总金额、每个分类下有多少条记录等。这类查询通常会用到聚合函数和 GROUP BY

COUNT函数

COUNT() 用于统计记录数量。

例如统计用户总数:

SELECT COUNT(*) AS total_users
FROM user;

也可以统计某个字段非空的数量:

SELECT COUNT(mobile) AS total_mobile
FROM user;

在大多数普通统计场景里,COUNT(*) 是最常见的写法。

SUM函数

SUM() 用于求和。

例如统计订单总金额:

SELECT SUM(amount) AS total_amount
FROM orders;

它适合:

  • 金额求和
  • 数量累计
  • 分组后的汇总统计

AVG函数

AVG() 用于计算平均值。

例如计算商品平均价格:

SELECT AVG(price) AS avg_price
FROM product;

这在统计分析、报表展示中很常见。

MAX和MIN函数

MAX() 用于获取最大值,MIN() 用于获取最小值。

例如:

SELECT MAX(price) AS max_price
FROM product;

SELECT MIN(price) AS min_price
FROM product;

它们常用于:

  • 查询最大订单金额
  • 查询最早创建时间
  • 查询最低价格、最高分数

GROUP BY关键字

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关键字

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 解决“分组后如何筛选”。它们是报表和统计查询的基础。