分组后的,within group这里的group是指下边的group by中的group吗
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在SQL中,WITHIN GROUP
子句与GROUP BY
子句所指的“group”含义不同。这里对两个概念进行区分:
GROUP BY 子句:用于将查询结果集按照一个或多个列的值进行分组,每个分组内部具有相同的列值组合。分组后,可以配合聚合函数(如SUM, COUNT, AVG等)对每个组的数据进行汇总计算。
WITHIN GROUP 子句:出现在特定的有序集聚合函数中,如PERCENTILE_CONT
、PERCENT_RANK
等。它不是指GROUP BY
产生的分组,而是指定了在哪些已经根据ORDER BY
子句排序的输入行内进行聚集操作。换句话说,WITHIN GROUP
是针对那些其计算结果依赖于输入数据特定排序的聚集函数所使用的语法部分。这里的“group”更倾向于理解为一组有序的数据序列,而非GROUP BY
操作所产生的逻辑分组。
例如,在语句SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY income) FROM households;
中,WITHIN GROUP
后面跟着的(ORDER BY income)
指定了在计算50th百分位数时,应先根据income
列的值对数据进行排序,然后在这一有序集合内执行百分位计算。
因此,WITHIN GROUP
中的“group”是指定排序上下文中的数据集合,而与GROUP BY
操作形成的逻辑分组是两个不同的概念。