关于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 看成一个整体字段,以他们整体来进行分组的。



浙公网安备 33010602011771号