关于group by的用法

一、存在如下数据表:

 

 

 

 

 

 

 

 

二、执行如下SQL语句:

SELECT name FROM test GROUP BY name

执行结果如下所示

三、思考上面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执行Select语句了:

(1)如果执行select *的话,那么返回的结果应该是虚拟表3,如果如下图所示:

(2)我们再看name列,每个单元格只有一个数据,所以我们select name的话,结果如下图所示:

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

  • select name, count(id) from test group by name

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

  • select name, sum(num) from test group by name

 (5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段,以他们整体来进行分组的。

 

posted @ 2019-06-18 15:30  n0page404  阅读(117)  评论(0)    收藏  举报