在MySQL数据库中,分组查询通常使用 `GROUP BY` 语句来实现。这种类型的查询允许你根据一个或多个列对结果集进行分组,然后使用聚合函数(如 `COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()` 等)对每个组的数据进行汇总计算。
以下是一些分组查询的示例和概念:
### 基本分组查询
使用 `GROUP BY` 对数据进行分组,并使用聚合函数进行计算:
```sql
SELECT column1, COUNT(*), SUM(column2)
FROM table_name
GROUP BY column1;
```
### 多列分组
可以按照多个列进行分组:
```sql
SELECT column1, column2, COUNT(*), AVG(column3)
FROM table_name
GROUP BY column1, column2;
```
### 筛选分组数据
使用 `HAVING` 子句对分组后的结果进行过滤,类似于 `WHERE` 子句,但用于过滤分组结果:
```sql
SELECT column1, SUM(column2)
FROM table_name
GROUP BY column1
HAVING SUM(column2) > 1000;
```
### 聚合函数组合
可以在同一个查询中使用多个聚合函数:
```sql
SELECT column1, COUNT(*) AS total_rows, AVG(column2) AS average_value
FROM table_name
GROUP BY column1;
```
### 与 `ORDER BY` 结合使用
对分组的结果进行排序:
```sql
SELECT column1, SUM(column2)
FROM table_name
GROUP BY column1
ORDER BY SUM(column2) DESC;
```
### 分组和非分组列
在某些情况下,你可能希望在 `SELECT` 语句中包含非分组列,但这通常会导致错误,因为MySQL要求 `SELECT` 列表中的所有列都必须在 `GROUP BY` 子句中明确分组,或者使用聚合函数。从MySQL 8.0开始,可以使用 `ONLY_FULL_GROUP_BY` SQL模式来强制执行这一点。
### 使用 `WITH ROLLUP`
`GROUP BY` 子句可以与 `WITH ROLLUP` 修饰符一起使用,以便在每个分组的末尾添加汇总行:
```sql
SELECT column1, SUM(column2)
FROM table_name
GROUP BY column1 WITH ROLLUP;
```
这将为每个 `column1` 的唯一值生成一个汇总行,以及一个总的汇总行。