当前位置:首页 > 数据库 > 【MYSQL】GROUP BY用法

【MYSQL】GROUP BY用法

2022年09月16日 21:42:38数据库14

先来看下表1,表名为test:

【MYSQL】GROUP BY用法 _ JavaClub全栈架构师技术笔记

表1

执行如下SQL语句:

SELECT` `name` `FROM` `test``GROUP` `BY` `name

你应该很容易知道运行的结果,没错,就是下表2:

【MYSQL】GROUP BY用法 _ JavaClub全栈架构师技术笔记

表2

可是为了能够更好的理解**“group by”多个列“”聚合函数“**的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。下面说说如何来思考上面SQL语句执行情况:

1.FROM test:该句执行后,应该结果和表1一样,就是原来的表。

2.FROM test Group BY name:该句执行后,我们想象生成了**虚拟表3,**如下所图所示,生成过程是这样的:group by name,那么找name那一列,具有相同name值的行,合并成一行,如对于name值为aa的,那么<1 aa 2>与<2 aa 3>两行合并成1行,所有的id值和number值写到一个单元格里面。

【MYSQL】GROUP BY用法 _ JavaClub全栈架构师技术笔记

3.接下来就要针对虚拟表3执行Select语句了:

(1)如果执行select *的话,那么返回的结果应该是虚拟表3,可是id和number中有的单元格里面的内容是多个值的,而关系数据库就是基于关系的,单元格中是不允许有多个值的,所以你看,执行select * 语句就报错了。

(2)我们再看name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。

(3)那么对于id和number里面的单元格有多个数据的情况怎么办呢?答案就是用 聚合函数,聚合函数就用来输入多个数据,输出一个数据的。 如cout(id),sum(number),而每个聚合函数的输入就是每一个多数据的单元格。

(4)例如我们执行select name,sum(number) from test group by name,那么sum就对虚拟表3的number列的每个单元格进行sum操作,例如对name为aa的那一行的number列执行sum操作,即2+3,返回5,最后执行结果如下:

【MYSQL】GROUP BY用法 _ JavaClub全栈架构师技术笔记

(5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段,以他们整体来进行分组的。如下图【MYSQL】GROUP BY用法 _ JavaClub全栈架构师技术笔记

(6)接下来就可以配合select和聚合函数进行操作了。如执行select name,sum(id) from test group by name,number,结果如下图:

【MYSQL】GROUP BY用法 _ JavaClub全栈架构师技术笔记

作者:今天你头秃了吗?
来源链接:https://blog.csdn.net/weixin_45005811/article/details/114670296

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/42257.html

标签: group by
分享给朋友:

“【MYSQL】GROUP BY用法” 的相关文章

mysql查询语句 groupby后取组内时间最近的一条数据时间

mysql查询语句 groupby后取组内时间最近的一条数据时间

在mysql中使用group by进行分组后取时间最近的一条数据,我们可以直接使用MAX()函数来实现 SELECT T2.nick_name as nickName, count(T1.shared_user_id) AS...

MySQL中 (GROUP BY 用法)和(ORDER BY用法)

MySQL中 (GROUP BY 用法)和(ORDER BY用法)

一、GROUP BY(分组) 例子: SELECT sum(id) as aa_id, max(id) as m_id, message FROM device_shadow_log GROUP BY message ORDER BY aa_id DESC 1...

MySQL的分组查询group by

group by (1)、group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组。 (2)、group by可用于单字段分组,也可用于多个字段分组。 复制代码select * from employee; +----...

mysql分组查询教程

在 MySQL 中,GROUP BY 关键字可以根据一个或多个字段对查询结果进行分组。 使用 GROUP BY 关键字的语法格式如下: GROUP BY ,, ... ... 其中,“字段名”表示需要分组的字段名称,多个字段时用逗号隔开...

mysql group by 用法解析(详细)

group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子句定义的每个组各返回一个结果。 某个员工信息表结构和数据如下:   i...

oracle group by执行慢,一次对group by时间导致的慢查询的优化

oracle group by执行慢,一次对group by时间导致的慢查询的优化

前言: 最近在测试环境中点击一个图表展示页面时,半天才得到后台响应的数据进行页面渲染展示,后台的响应很慢,这样极大的降低了用户的体验; 发现这个问题后马上进行了排查 ,通过排查发现是由一个查询很慢的 group by 语句导致的; 本文...

MySQL5.7.5及以上执行group by报错

MySQL5.7.5及以上执行group by报错

MySQL执行报错: [Err] 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'cerebrum_sit.s.id' wh...

SQL: select非group by的字段

使用group by查找或删除重复行,请参考    SQL:查找或删除重复行 在含有Group by子句的查询语句中,对select关键字后的目标列,存在以下规律 使用group by 时,select 涉及的列要么是参...

mysql group 遍历

原创: 管长龙 译作者:Peter Zaitsev 在日常查询中,索引或其他数据查找的方法可能不是查询执行中最高昂的部分,例如:MySQL GROUP BY 可能负责查询执行时间 90% 还多。MySQL 执行 GROUP BY 时的主要复杂性是计算 GROUP...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。