fre*_*021 3 sql group-by window-functions
我对 SQL 和数据工程相当陌生。最近偶然接触到窗口函数,发现窗口函数执行的操作也可以用group by来完成。
\n有人可以解释一下两者之间的区别以及何时在 group by\xe2\x80\xaf 上使用窗口函数吗?
\n简而言之,非常简单:窗口函数保留结果行,group by压缩它们。如果您需要的信息与您需要的聚合相关group by,如果信息与您需要的特定行相关,则需要窗口函数。
例如:假设您有包含部门和薪水的员工集合。要了解部门的平均工资是多少,可以使用select dept_id, avg(salary) from emp group by dept(聚合)。要了解每个员工与平均值的差异,请使用select emp_id, salary - avg(salary) over (partition by dept_id) from emp(窗口函数)。
还有一些用例可以通过窗口函数 和 来解决group by,例如select grp, min(value) ... group by grp相当于select grp, value from (select grp, row_number() over (partition by grp order by value) as rn, value ...) x where x.rn = 1),因此边界有些模糊,其他标准(例如可读性、可扩展性或性能)必须帮助决定。