文章目录[隐藏]
写在前面的话:用了好久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。结果如下图:
- 三国群英传7大地图 三国群英传7天子传奇详细说明
- 163相册登录入口 163相册还能找回吗
- 长大了烦恼多了的说说大全 长大好烦的说说
- 抖音优美文艺深刻励志文案 优美文艺的短句子
- 新手买ps4注意事项,ps4新手简单经典游戏推荐排行榜
以上就是由互联网推广工程师 网创网 整理编辑的,如果觉得有帮助欢迎收藏转发~
本文地址:https://www.wangchuang8.com/81499.html,转载请说明来源于:网创推广网
声明:本站部分文章来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系进行处理。分享目的仅供大家学习与参考,不代表本站立场。
评论(2)
group by having用法 关于where group by having用法原理 这篇解答确实也是太好了
多个,单元格,函数,语句,字段,数据,只有一个,下一步,如下图,下表
写在前面的话:用了好久group by。今天早上一觉醒来。突然感觉group by好陌生。总有个筋别不过来。为什么不能够