MySQL GROUP BY 语句

GROUP BY 语句根据一个或多个列对结果集进行分组

在分组的列上我们可以使用 COUNT, SUM, AVG,等函数

GROUP BY 语句是 SQL 查询中用于汇总和分析数据的重要工具,尤其在处理大量数据时,它能够提供有用的汇总信息

GROUP BY 语法

SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;
  • column1:指定分组的列。
  • aggregate_function(column2):对分组后的每个组执行的聚合函数。
  • table_name:要查询的表名。
  • condition:可选,用于筛选结果的条件。

以下示例在之前创建的RoboMaster数据库下进行操作

当前数据库数据

mysql> select * from Username;
+------+--------------+-----------+
| id   | Username     | Password  |
+------+--------------+-----------+
|    2 | xin          | 123456789 |
|    1 | steins_xin   | 123456    |
|    1 | aasteins_xin | 123456    |
|    2 | steins       | 123456789 |
+------+--------------+-----------+
4 rows in set (0.00 sec)

GROUP BY SUM 基本语法

SELECT id, SUM(id) AS ID_SUM
FROM username
GROUP BY id;

使用 GROUP BY id 将结果按 id 列分组,然后使用 SUM(id) 计算每个组中 id 列的总和。

AS ID_SUM是为了给计算结果取一个别名,使查询结果更易读。

结果:

mysql> SELECT id, SUM(id) AS ID_SUM
    -> FROM username
    -> GROUP BY id;
+------+--------+
| id   | ID_SUM |
+------+--------+
|    2 |      4 |
|    1 |      2 |
+------+--------+
2 rows in set (0.00 sec)

GROUP BY COUNT 基本语法

SELECT id, COUNT(*) FROM username GROUP BY id;

结果:

mysql> SELECT id, COUNT(*) FROM username GROUP BY id;
+------+----------+
| id   | COUNT(*) |
+------+----------+
|    2 |        2 |
|    1 |        2 |
+------+----------+
2 rows in set (0.00 sec)

GROUP BY WITH ROLLUP 基本语法

```sql SELECT id, SUM(id) as id_count FROM username GROUP BY id WITH ROLLUP; ```

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计

例如我们将以上的数据表按IID进行分组,再统计ID的总和

其中记录 NULL 表示所有ID总和

可以使用 coalesce 来设置一个可以取代 NULL的名称,coalesce 语法:

select coalesce(a,b,c);

参数说明:如果 a==null,则选择 b;如果 b==null,则选择 c;如果 a!=null,则选择 a;如果 a b c 都为 null ,则返回为 null

示例:

SELECT coalesce(id, 'ID总和'), SUM(id) as id_count FROM username GROUP BY id WITH ROLLUP;

结果:

mysql> SELECT coalesce(id, 'ID总和'), SUM(id) as id_count FROM username GROUP BY id WITH ROLLUP;
+------------------------+----------+
| coalesce(id, 'ID总和') | id_count |
+------------------------+----------+
| 1                      |        2 |
| 2                      |        4 |
| ID总和                 |        6 |
+------------------------+----------+
3 rows in set (0.00 sec)

1:

results matching ""

    No results matching ""