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: