关于 GROUP BY 子句,为什么这样写呢?

关于 GROUP BY 子句,为什么这样写呢?

http://img1.sycdn.imooc.com//climg/5dc2d67109ca63b307060477.jpg

在分组查询的内容中,老师讲过查询语句中如果含有 GROUP BY 子句,那么 SELECT 子句中只能包含 GROUP BY 子句的分组列名和聚合函数,其余内容均不可出现在 SELECT 子句中

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手乔木 2019-11-07 12:04:08

同学你好:

老师的提示是没有错误的,

例如:

test表:

http://img1.sycdn.imooc.com//climg/5dc3954c098be5ab04200444.jpg

如果根据name进行分组,执行sql语句:

SELECT name FROM test

GROUP BY name;

http://img1.sycdn.imooc.com//climg/5dc395b1096319eb01520221.jpg

查询时先要对数据进行分组(FROM test Group BY name),我们可以虚拟一个表。

http://img1.sycdn.imooc.com//climg/5dc39658093203f204880415.jpg

找name那一列,具有相同name值的行,合并成一行,如对于name值为aa的,那么<1 aa 2>与<2 aa 3>两行合并成1行,所有的id值和number值写到一个单元格里面。

(1)如果执行select id或者number的话,那么返回的结果应该是虚拟表,可是id和number中有的单元格里面的内容是多个值的,而关系数据库就是基于关系的,单元格中是不允许有多个值的,所以执行select id或者number 语句就会出现错误。

(2)name列,每个单元格只有一个数据,所以我们select name的话,就没有问题。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。

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

回到我们的问题,由于我们的group by的是主键deptno,每个主键对应一条数据,因此不会出现同一个单元格有多个数据的情况,因此可以使用select查询。

如果我解决了同学的问题,请采纳!学习愉快^_^。


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师