SQL关键字快速入门:GROUP BY 分组统计

182 阅读3分钟

 在实际的数据分析中,我们经常需要对数据进行分类汇总,比如:

  • 每个用户的订单总金额是多少?
  • 每个产品的销售数量是多少?
  • 每个月的销售额趋势如何?

这时候就需要用到 SQL 中非常实用的关键字 —— GROUP BY


一、 什么是 GROUP BY?

GROUP BY 的作用是将查询结果按照一个或多个字段进行“分组”,然后对每个组内的数据进行聚合操作(如求和、计数、平均值等)。

你可以把它理解为:“把相同类型的数据归类在一起,再做统计”。


二、 基本语法

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;

  • column1:用于分组的字段。
  • aggregate_function:聚合函数,如 SUM()COUNT()AVG()MAX()MIN() 等。

三、示例讲解

假设我们有一个 orders 表,记录了每个用户下的订单信息:

表:orders

order_iduser_idproductamount
11手机2999
21耳机499
32鼠标199
42键盘399
53显示器899

 示例1:按用户分组,计算每个用户的订单总金额

SELECT user_id, SUM(amount) AS total_amount
FROM orders
GROUP BY user_id;

结果:

user_idtotal_amount
13498
2598
3899

 这里使用了 SUM() 函数来计算每个用户的订单总金额。


 示例2:按用户分组,统计每个用户的订单数量

SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id;

结果:

user_idorder_count
12
22
31

 使用 COUNT(*) 统计每个用户下了多少个订单。


 示例3:结合 WHERE 条件 + 多字段分组

-- 查询每个用户购买每种商品的数量
SELECT user_id, product, COUNT(*) AS count
FROM orders
GROUP BY user_id, product;

结果:

user_idproductcount
1手机1
1耳机1
2鼠标1
2键盘1
3显示器1

 这里通过两个字段(user_idproduct)来进行分组,更细粒度地统计数据。


注意:

  • GROUP BY 后面必须列出所有非聚合列。也就是说,在 SELECT 中出现的列,如果不是聚合函数的结果,就必须出现在 GROUP BY 中。

     

     错误示例:

    SELECT user_id, product, COUNT(*)
    FROM orders
    GROUP BY user_id; -- product 没有出现在 GROUP BY 中,会报错
    

  • 可以结合 HAVING 对分组后的结果进行筛选,例如只显示总金额大于1000的用户:

    SELECT user_id, SUM(amount) AS total
    FROM orders
    GROUP BY user_id
    HAVING total > 1000;
    


四、总结对比表

功能示例语句
分组求和SELECT user_id, SUM(amount)
分组计数SELECT user_id, COUNT(*)
多字段分组GROUP BY user_id, product
分组后筛选HAVING SUM(amount) > 1000
常见聚合函数SUM()COUNT()AVG()MAX()MIN()

如果这篇文章对大家有帮助可以点赞关注,你的支持就是我的动力😊!