文章目录[隐藏]
写在前面的话:用了好久group by。今天早上一觉醒来。突然感觉group by好陌生。总有个筋别不过来。为什么不能够select * from Table group by id。为什么一定不能是*。而是某一个列或者某个列的聚合函数。group by 多个字段可以怎么去很好的理解呢?不过最后还是转过来了。简单写写吧。大牛们直接略过吧。
=========正文开始===========
先来看下表1。表名为test:
表1
执行如下SQL语句:
1.SELECT name FROM test2.GROUP BY name你应该非常的容易知道运行的结果。没错。就是下表2:
表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值写到一个单元格里面。
表3
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。最后执行结果如下:
表4
(5)group by 多个字段该怎么理解呢:如group by name,number。咱们可以把name和number 看成一个全体字段。以他们全体来进行分组的。如下图
(6)下一步就可以配合select和聚合函数进行操作了。如执行select name,sum(id) from test group by name,number。结果如下图:
以上就是由优质生活领域创作者 生活常识网 整理编辑的,如果觉得有帮助欢迎收藏转发~
本文地址:http://www.shenzhoubaby.com/5853.html,转载请说明来源于:生活常识网
声明:本站部分文章来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系@qq.com进行处理。分享目的仅供大家学习与参考,不代表本站立场。