关于 GROUP BY 子句,为什么这样写呢?
来源:3-6 表的外连接
皓月神威
2019-11-06 22:20:37
在分组查询的内容中,老师讲过查询语句中如果含有 GROUP BY 子句,那么 SELECT 子句中只能包含 GROUP BY 子句的分组列名和聚合函数,其余内容均不可出现在 SELECT 子句中
1回答
好帮手乔木
2019-11-07
同学你好:
老师的提示是没有错误的,
例如:
test表:
如果根据name进行分组,执行sql语句:
SELECT name FROM test
GROUP BY name;
查询时先要对数据进行分组(FROM test Group BY name),我们可以虚拟一个表。
找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查询。
如果我解决了同学的问题,请采纳!学习愉快^_^。
相似问题