group by having用法 关于where group by having用法原理
原创

group by having用法 关于where group by having用法原理

好文
试试语音读文章

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

您还感兴趣的文章推荐

以上就是由互联网推广工程师 网创网 整理编辑的,如果觉得有帮助欢迎收藏转发~

分享到 :
相关推荐

发表评论

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

评论(2)

  • 眼角痣 永久VIP 2022年12月14日 01:24:27

    group by having用法 关于where group by having用法原理 这篇解答确实也是太好了

  • 难拥 永久VIP 2022年12月14日 01:24:27

    多个,单元格,函数,语句,字段,数据,只有一个,下一步,如下图,下表

  • 意中人 永久VIP 2022年12月14日 01:24:27

    写在前面的话:用了好久group by。今天早上一觉醒来。突然感觉group by好陌生。总有个筋别不过来。为什么不能够