我们在利用group by对数据进行分组后会得到多个“逻辑组”最后执行“select语句部分”请问:select 怎么处理这些逻辑组的呢?例如:select 班级, count(学号) as 人数 from 学生表 group by 班级请问像上面这样的SQL语句, select 是如何来处理“逻辑组”的呢?在利用group by进行分组后会得到一些“逻辑组”(即: 一些“子集”)我目前的理解是:
select只能针对一条数据进行处理,而不能针对多行
(这里的多行指的是通过“group by”分组后得到的逻辑组)而聚合函数(例如:count)会“遍历逻辑组”,然后得到结果。请问我理解的对么?也就是说:select 不能处理“组数据”(在一次执行过程中),而count处理组数据,就是去遍历那些逻辑组。谁能在讲的详细深入一些哦~
select只能针对一条数据进行处理,而不能针对多行
(这里的多行指的是通过“group by”分组后得到的逻辑组)而聚合函数(例如:count)会“遍历逻辑组”,然后得到结果。请问我理解的对么?也就是说:select 不能处理“组数据”(在一次执行过程中),而count处理组数据,就是去遍历那些逻辑组。谁能在讲的详细深入一些哦~
(疯狂de小白兔~) 等 级:
结帖率:100.74% 这个结帖率怎么回事呀? csdn又出bug了吗?
但是个人觉得不错
楼主有兴趣可以看看
由于使用Group By,所以产生多组数据。select中一次只能处理一行数据,所以无法一次处理一组数据。
只能将一组转化为一行数据。(例如:利用聚合函数)例(1):
select 班级, AVG(年龄) as 平局年龄 from 学生表 group by 班级上面SQL执行的过程是:
(1) 先执行from 然后根据“班级”进行分组(得到多个逻辑组)
(2) 然后执行select语句。select能处理行数据,但不能处理“组数据”
所以写成
例(2)“select 年龄 from 学生表 group by 班级”将是错误的。----------------------------------------------------
如果我们要想要利用“组数据”就需要将其进行转换。
例如上面的“例(1)”是利用AVG()去遍历“单组”的数据然后得到一个“单独数据”
(用于填充一行,然后select就能去处理这行了)。不知道我理解的是否正确?
就像你说的,一组中的数据必须经过处理,通过avg之类的,当然也可以通过row_number分析函数,取出每组中的第一条等等,这些都算是处理,不然就不可以
大家一起努力学习吧!