MySQL约束、函数和运算符
8
MySQL操作表中数据
-
8.1
MySQL查询数据表
-
8.2
MySQL去重
-
8.3
MySQL设置别名
-
8.4
MySQL限制查询结果的条数
-
8.5
MySQL对查询结果排序
-
8.6
MySQL条件查询
-
8.7
MySQL使用LIKE模糊查询
-
8.8
MySQL范围查询
-
8.9
MySQL空值查询
-
8.10
MySQL分组查询
-
8.11
MySQL过滤分组
-
8.12
MySQL交叉连接
-
8.13
MySQL内连接
-
8.14
MySQL外连接
-
8.15
MySQL子查询
-
8.16
MySQL子查询注意事项
-
8.17
MySQL子查询的简单改写优化
-
8.18
MySQL正则表达式查询
-
8.19
SQL查询语句先执行SELECT?兄弟你认真的么?
-
8.20
MySQL插入数据
-
8.21
MySQL修改数据
-
8.22
MySQL删除数据
-
8.23
MySQL清空表记录
-
8.24
MySQL如何多表关联更新?
-
8.25
MySQL如何处理无效数据值?
-
8.26
向MySQL发送一个请求的时候,MySQL到底做了些什么?
-
8.27
不得不说的SQL注入攻击,别一不留神就被利用了!
MySQL视图、索引
MySQL存储过程和触发器
MySQL事务和字符集
MySQL用户管理
MySQL数据库备份与恢复
MySQL日志
MySQL性能优化
下面根据 tb_students_info 表中的 sex 字段进行分组查询,SQL 语句和运行结果如下:
mysql> SELECT `name`,`sex` FROM tb_students_info
-> GROUP BY sex;
+-------+------+
| name | sex |
+-------+------+
| Henry | 女 |
| Dany | 男 |
+-------+------+
2 rows in set (0.01 sec)
结果中只显示了两条记录,这两条记录的 sex 字段的值分别为“女”和“男”。
GROUP BY 与 GROUP_CONCAT()
GROUP BY 关键字可以和
GROUP_CONCAT()
函数一起使用。GROUP_CONCAT() 函数会把每个分组的字段值都显示出来。
下面根据 tb_students_info 表中的 sex 字段进行分组查询,使用 GROUP_CONCAT() 函数将每个分组的 name 字段的值都显示出来。SQL 语句和运行结果如下:
mysql> SELECT `sex`, GROUP_CONCAT(name) FROM tb_students_info
-> GROUP BY sex;
+------+----------------------------+
| sex | GROUP_CONCAT(name) |
+------+----------------------------+
| 女 | Henry,Jim,John,Thomas,Tom |
| 男 | Dany,Green,Jane,Lily,Susan |
+------+----------------------------+
2 rows in set (0.00 sec)
由结果可以看到,查询结果分为两组,sex 字段值为“女”的是一组,值为“男”的是一组,且每组的学生姓名都显示出来了。
下面根据 tb_students_info 表中的 age 和 sex 字段进行分组查询。SQL 语句和运行结果如下:
mysql> SELECT age,sex,GROUP_CONCAT(name) FROM tb_students_info
-> GROUP BY age,sex;
+------+------+--------------------+
| age | sex | GROUP_CONCAT(name) |
+------+------+--------------------+
| 21 | 女 | John |
| 22 | 女 | Thomas |
| 22 | 男 | Jane,Lily |
| 23 | 女 | Henry,Tom |
| 23 | 男 | Green,Susan |
| 24 | 女 | Jim |
| 25 | 男 | Dany |
+------+------+--------------------+
7 rows in set (0.00 sec)
上面实例在分组过程中,先按照 age 字段进行分组,当 age 字段值相等时,再把 age 字段值相等的记录按照 sex 字段进行分组。
多个字段分组查询时,会先按照第一个字段进行分组。如果第一个字段中有相同的值,MySQL 才会按照第二个字段进行分组。如果第一个字段中的数据都是唯一的,那么 MySQL 将不再对第二个字段进行分组。
GROUP BY 与聚合函数
在数据统计时,GROUP BY 关键字经常和聚合函数一起使用。
聚合函数包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()。其中,COUNT() 用来统计记录的条数;SUM() 用来计算字段值的总和;AVG() 用来计算字段值的平均值;MAX() 用来查询字段的最大值;MIN() 用来查询字段的最小值。
关于聚合函数的详细内容可以阅读学习《
MySQL函数大全
》一节。
下面根据 tb_students_info 表的 sex 字段进行分组查询,使用 COUNT() 函数计算每一组的记录数。SQL 语句和运行结果如下:
mysql> SELECT sex,COUNT(sex) FROM tb_students_info
-> GROUP BY sex;
+------+------------+
| sex | COUNT(sex) |
+------+------------+
| 女 | 5 |
| 男 | 5 |
+------+------------+
2 rows in set (0.00 sec)
结果显示,sex 字段值为“女”的记录是一组,有 5 条记录;sex 字段值为“男”的记录是一组,有 5 条记录。
GROUP BY 与 WITH ROLLUP
WITH POLLUP
关键字用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,即统计记录数量。
下面根据 tb_students_info 表中的 sex 字段进行分组查询,并使用 WITH ROLLUP 显示记录的总和。
mysql> SELECT sex,GROUP_CONCAT(name) FROM tb_students_info
->GROUP BY sex WITH ROLLUP;
+------+------------------------------------------------------+
| sex | GROUP_CONCAT(name) |
+------+------------------------------------------------------+
| 女 | Henry,Jim,John,Thomas,Tom |
| 男 | Dany,Green,Jane,Lily,Susan |
| NULL | Henry,Jim,John,Thomas,Tom,Dany,Green,Jane,Lily,Susan |
+------+------------------------------------------------------+
3 rows in set (0.00 sec)
查询结果显示,GROUP_CONCAT(name) 显示了每个分组的 name 字段值。同时,最后一条记录的 GROUP_CONCAT(name) 字段的值刚好是上面分组 name 字段值的总和。
关注公众号「
站长严长生
」,在手机上阅读所有教程,随时随地都能学习。本公众号由
C语言中文网站长
亲自运营,长期更新,坚持原创。
微信扫码关注公众号