比如③不能在 GROUP BY子句中使用窗口函数会报错,需要子查询充当数据源或CTE,
但GROUP BY sum(ID)这种就不会报错
GROUP BY 后面只能用聚合函数,对分组后的数据做二次筛选,其他条件尽量放在where语句后面。
这与sql解析执行顺序有关,
"窗口函数"之所以叫窗口函数,是因为它产生了一个窗口,在窗口函数开始计算前,这个窗口中当前已经有除了窗口函数以外的所有字段值,group by 也已经执行完了,而且这个窗口的数据条数和你最终输出的条数是一致的,它基于这个窗口内的数据去进行各种计算,然后直接在这个窗口上将窗口函数计算的值放到对应的窗口函数字段,形成最终的输出数据,到此这个sql就已经执行完了(不含distinct 的情况下),因此无法再次group by
没太能理解你的意思,group by sum(id),id字段是表中本来就有的字段,为什么不可以?开窗函数是select后面的字段,你group by的时候根本就没有开窗函数的字段,当然会报错,所以才要加入子查询,有图吗。。