我们在利用group by对数据进行分组后会得到多个“逻辑组”最后执行“select语句部分”请问:select 怎么处理这些逻辑组的呢?例如:select 班级, count(学号) as 人数  from 学生表 group by 班级请问像上面这样的SQL语句, select 是如何来处理“逻辑组”的呢?在利用group by进行分组后会得到一些“逻辑组”(即: 一些“子集”)我目前的理解是:
select只能针对一条数据进行处理,而不能针对多行
(这里的多行指的是通过“group by”分组后得到的逻辑组)而聚合函数(例如:count)会“遍历逻辑组”,然后得到结果。请问我理解的对么?也就是说:select 不能处理“组数据”(在一次执行过程中),而count处理组数据,就是去遍历那些逻辑组。谁能在讲的详细深入一些哦~

解决方案 »

  1.   

    xiaobaitu7788
     
    (疯狂de小白兔~) 等 级: 
    结帖率:100.74% 这个结帖率怎么回事呀? csdn又出bug了吗?
      

  2.   

    http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Fwh62592855不一定"深入"
    但是个人觉得不错 
    楼主有兴趣可以看看
      

  3.   

    其实CSDN。还有重复提交的问题了上次我发帖子,提交按钮卡在那里了。按了2下,居然出现了2篇同样的文章。
      

  4.   


    由于使用Group By,所以产生多组数据。select中一次只能处理一行数据,所以无法一次处理一组数据。
    只能将一组转化为一行数据。(例如:利用聚合函数)例(1):
    select 班级, AVG(年龄) as 平局年龄 from 学生表 group by 班级上面SQL执行的过程是:
    (1) 先执行from 然后根据“班级”进行分组(得到多个逻辑组)
    (2) 然后执行select语句。select能处理行数据,但不能处理“组数据”
    所以写成
    例(2)“select 年龄 from 学生表 group by 班级”将是错误的。----------------------------------------------------
    如果我们要想要利用“组数据”就需要将其进行转换。
    例如上面的“例(1)”是利用AVG()去遍历“单组”的数据然后得到一个“单独数据”
    (用于填充一行,然后select就能去处理这行了)。不知道我理解的是否正确?
      

  5.   

    是这么回事
    就像你说的,一组中的数据必须经过处理,通过avg之类的,当然也可以通过row_number分析函数,取出每组中的第一条等等,这些都算是处理,不然就不可以
      

  6.   

    Adebayor 哥哥谢谢哈~~ 我给你加分
      

  7.   

    thank you 
    大家一起努力学习吧!