关于group by的深入理解

今天,对sql的分组语句又有了更深的理解,因此在此记录。
上课时看到一个案例:
select (select eedepa from examinee where eeexam.eeid = examinee.eeid), AVG(achieve) from eeexam group by(select eedepa from examinee where eeexam.eeid = examinee.eeid)
这个语句一开始无法理解,显然这是一个相关子查询,即子查询依赖于父查询的输入,于是我认为在遍历eeexam表的时候进行select的同时会进行分组,这就非常奇怪了,因为这样理解的话group by后面是一个个具体的属性的值,这样一来就是根据具体属性值来分组,于是始终无法理解。
后来经老师同学的帮助以及进一步理解,解决此问题,不知道理解是否正确,但是至少在逻辑上成功自恰了,理解如下:
group by“会对通过where过滤之后生成的表按group by子句中指定列的值分组。”从上面这句教材中可以看出以下两点:1、group by是在select 出符合条件的表后进行分组的;2、group by按子句中指定的列进行分组。因此以上代码可以这样理解:先进行查询(相关子查询),得到一个eedepa、achieve这两个属性的表,有achieve是因为avg()聚集函数需要分组后才能起作用。这个时候group by后面的相关子查询也得到了一个单列表(仅有eedepa属性),然后在将生成的表按照eedepa单列表进行分组,然后作用聚集函数,得到最终的表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值