group(Group1)
首发

group(Group1)

优质
请用语音读文章

写在前面的话:用了好久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。结果如下图:

以上就是由优质生活领域创作者 生活常识网 整理编辑的,如果觉得有帮助欢迎收藏转发~

分享到 :
相关推荐

qq生活网教程(小高教程最新技术)

请用语音读文章答:有的。自己搜索关注就好了。qq生活服务需要自己先去关注。才能[&h...

奶茶婊是什么意思网络语言(抖音奶茶女孩是什么意思)

请用语音读文章不知从何时起。“婊”被冠以了很多前缀。什么“绿茶婊”、“咖啡婊”、“[...

养养花种种草的说说大全(朋友圈晒花草的说说)

请用语音读文章  1、有个属于自己的小房子。种种菜养养花。一猫一狗。没有繁杂的世俗[...

含有杏花的诗句有哪些(带有杏花的诗句有哪些)

请用语音读文章自古以来。花朵便是文人墨客笔下最喜欢称颂的植物。在王安石笔下。梅花[&...

发表评论

您的电子邮箱地址不会被公开。