MySQL之group by

备战2022春招或暑期实习,本专栏会持续输出MySQL系列文章,祝大家每天进步亿点点!文末私信作者,我们一起去大厂。

本篇总结的是 《MySQL之group by》,后续会每日更新~

关于《Redis入门到精通》、《并发编程》、《Java全面入门》、《鸿蒙开发》等知识点可以参考我的往期博客

相信自己,越活越坚强,活着就该逢山开路,遇水架桥!生活,你给我压力,我还你奇迹!MySQL之group by目录


1、正文


2、正文


2.1 group by规则


2.2 group by使用


2.3 having使用


2.4 order by与limit


2.5 with rollup


1、正文

MySQL的group by用于对查询的数据进行分组;此外MySQL提供having子句对分组内的数据进行过滤。


MySQL提供了许多select子句关键字,它们在语句中的顺序如下所示:

MySQL之group by

2、正文

准备一张user表,其DDL和表数据如下所示MySQL之group byMySQL之group by2.1 group by规则

使用group by之前需要先了解group by使用的相关规则


group by子句置于where之后,order by子句之前

having 子句置于group by 之后,order by子句之前

group by子句中的每个列都必须是select的检索列或者有效表达式,不能使用聚集函数

select中使用的表达式,在group by子句中必须出现,并且不能使用别名

group by分组的数据中包含null值,null值被分为一组

group by子句可以嵌套,嵌套的分组在最后分组上汇总

2.2 group by使用

需求:

统计不同民族的用户数

语句:MySQL之group by

2.3 having使用

对group by分组后的数据还需要再次过滤,就必须使用having子句。group by子句后使用where子句MySQL服务器会抛出异常

mysql> select nation, count(*) as nation_num  from user group by nation where nation = '汉族';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where nation = '汉族'' at line 1mysql> select nation, count(*) as nation_num  from user group by nation where nation = '汉族';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where nation = '汉族'' at line 1

MySQL之group by

mysql> select nation, count(*) as nation_num  from user group by nation having nation != '汉族' order by nation_num desc;
+----------+------------+
| nation   | nation_num |
+----------+------------+
| * |          2 |
| 回族     |          1 |
| 蒙古族   |          1 |
+----------+------------+
3 rows in set (0.00 sec)

对于输出的结果需要指定返回的行数,可以使用limit,limit子句在整个语句的最后。

1.
mysql> select nation, count(*) as nation_num  from user group by nation having nation != '汉族' order by nation_num desc limit 2;
+----------+------------+
| nation   | nation_num |
+----------+------------+
| * |          2 |
| 回族     |          1 |
+----------+------------+
2 rows in set (0.00 sec)

2.5 with rollup

在group by子句中,WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)

比如max():

mysql> select nation, max(height) as nation_num  from user group by nation with rollup;+----------+------------+| nation   | nation_num |+----------+------------+| 回族     |        175 || 汉族     |        184 || * |        192 || 蒙古族   |        177 || NULL     |        192 |+----------+------------+5 rows in set (0.00 sec)

MySQL之group byMySQL之group by

上一篇:MySQL之select、distinct、limit使用


下一篇:OpenCart2.1 中文社区版(免费下载)