全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-15 6 分钟 ✍️ juanwangdev

MySQL GROUP BY 分组

GROUP BY 子句将查询结果按一个或多个列分组,配合聚合函数进行分组统计。

基本语法

SQL
SELECT 列名, 聚合函数(列名)
FROM 表名
GROUP BY 列名;

单列分组

SQL
-- 创建示例表
CREATE TABLE sales (
    id INT PRIMARY KEY,
    product VARCHAR(50),
    category VARCHAR(30),
    amount DECIMAL(10, 2)
);

INSERT INTO sales VALUES
(1, '手机', '电子产品', 3000),
(2, '电脑', '电子产品', 5000),
(3, '耳机', '电子产品', 500),
(4, '衣服', '服装', 200),
(5, '裤子', '服装', 150);

-- 按类别统计销售额
SELECT category, SUM(amount) AS 总销售额
FROM sales
GROUP BY category;

-- 按类别统计数量和平均值
SELECT category,
       COUNT(*) AS 数量,
       AVG(amount) AS 平均金额,
       SUM(amount) AS 总金额
FROM sales
GROUP BY category;

多列分组

SQL
-- 按类别和产品分组
SELECT category, product, SUM(amount) AS 总金额
FROM sales
GROUP BY category, product;

GROUP BY 与 ORDER BY

SQL
-- 按类别分组并按总销售额降序
SELECT category, SUM(amount) AS 总销售额
FROM sales
GROUP BY category
ORDER BY 总销售额 DESC;

GROUP BY 与 WHERE

SQL
-- WHERE 在 GROUP BY 之前过滤
SELECT category, SUM(amount) AS 总销售额
FROM sales
WHERE amount > 100
GROUP BY category;

WITH ROLLUP 汇总

SQL
-- 在分组结果基础上增加汇总行
SELECT category, SUM(amount) AS 总销售额
FROM sales
GROUP BY category WITH ROLLUP;

-- 结果包含每个类别的汇总和总汇总
-- 电子产品 | 8500
-- 服装     | 350
-- NULL     | 8850  (总汇总)

SELECT 中出现的非聚合列必须出现在 GROUP BY 中。

要点总结

  • GROUP BY 按列值分组,每组返回一行
  • SELECT 中非聚合列必须在 GROUP BY 中出现
  • WHERE 在 GROUP BY 之前执行
  • WITH ROLLUP 可增加汇总行

📝 发现内容有误?点击此处直接编辑

← 上一篇 MySQL DISTINCT 去重
下一篇 → MySQL HAVING 过滤分组
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库