mysql group by 解释
时间: 2025-02-18 18:45:55 浏览: 47
### MySQL GROUP BY 子句的作用
在 SQL 中,`GROUP BY` 子句用于将具有相同值的行分组在一起。这使得可以对每一组应用聚合函数来获取汇总信息,如总数、平均值等[^2]。
例如,在 `study.products` 表中按供应商 ID (`vend_id`) 对产品数量进行统计:
```sql
SELECT vend_id, COUNT(*) AS num_prods
FROM study.products
GROUP BY vend_id;
```
此命令会返回每个供应商的产品数目列表[^1]。
### 使用方法
#### 基本语法结构
基本形式如下所示:
```sql
SELECT column_name(s)
FROM table_name
WHERE condition /* 可选 */
GROUP BY column_name(s);
```
这里的关键在于指定要分组的一个或多个列,并且可以在查询中加入其他子句比如 `WHERE` 来过滤记录[^4]。
#### 结合聚合函数
通常情况下,`GROUP BY` 和聚合函数一起使用以获得更丰富的统计数据。常见的聚合函数有:
- `COUNT()` 计算条目数;
- `SUM()` 总和;
- `AVG()` 平均值;
- `MAX()`, `MIN()` 查找最大/最小值。
示例:计算每位学生各科成绩总分并显示姓名与分数之和:
```sql
INSERT INTO tb_test (name, age, year, score) VALUES ('cj1', 3, 2016, 85),
('cj2', 4, 2015, 90), ('cj3', 5, 2014, 95);
SELECT name, SUM(score) FROM tb_test GROUP BY name;
```
这段代码先插入了几条测试数据,接着通过 `GROUP BY` 将不同名字的学生的成绩相加求得各自总分[^3]。
#### 添加总计行(WITH ROLLUP)
为了方便查看整体情况,还可以使用带有 `WITH ROLLUP` 的 `GROUP BY` 来自动增加一个额外的小计或合计行。对于上述例子来说就是这样的操作:
```sql
SELECT IFNULL(name,'Total') AS total, SUM(score)
FROM tb_test
GROUP BY name WITH ROLLUP;
-- 或者使用 COALESCE 函数实现同样的效果
SELECT COALESCE(name,'Total') AS total, SUM(score)
FROM tb_test
GROUP BY name WITH ROLLUP;
```
这两段语句都会给结果集中追加一行表示所有学生的得分总和。
#### 排序输出
如果希望按照特定顺序排列最终的结果,则可在最后加上 `ORDER BY` 子句来进行排序处理。需要注意的是当存在 `GROUP BY` 时应确保所排序字段要么出现在选择列表里要么参与了分组依据。
---
阅读全文
相关推荐













