详细内容或原文请订阅后点击阅览
超越基础的 SQL 窗口函数:解决实际业务问题
你知道窗口函数,但是你知道如何使用它们来解决业务问题吗?看完这篇文章你就会了。
来源:KDnuggets简介
大多数人都使用 SQL 窗口函数,但您只触及了表面——这里是 ROW_NUMBER(),那里是 SUM() OVER()。当您将窗口函数应用于更困难的问题时,它们的真正潜力就会显现出来。我将引导您了解四种最有用的窗口函数模式。
这些示例都是真实的面试问题,您可以在 StrataScratch 上练习。
运行总计
计算运行总计是窗口函数最常见的业务用途之一。金融界人士绝对喜欢它!它用于跟踪累计每月收入,然后轻松计算您与年度收入目标相比的情况。
造成这个窗口函数问题的原因是,通常您应该在同一输出中包含每个周期的值和累加总数。您不能将 GROUP BY 与 SUM() 一起使用,因为这会折叠各个行。因此,显而易见的解决方案是使用窗口函数,即 SUM() OVER()。
示例:计算一段时间内的收入
这个亚马逊问题最初要求您计算 3 个月滚动平均值。但是,我们将忽略这一点并计算每个月的累计收入。
数据:这是 amazon_purchases 表预览。
代码:内部查询使用 TO_CHAR() 将日期转换为 YYYY-MM 格式,并聚合每月收入,过滤掉 WHERE buy_amt > 0 的退货。
外部查询对我们计算的每月总计应用窗口函数。我没有在 OVER() 中(故意)指定显式框架子句,因此窗口函数默认为 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。这意味着窗口是当前行(即月份)之前的所有行。也就是说,累计和为:之前所有月份+当月。毫不奇怪,这是累积总和的教科书定义。
输出:
间隙和孤岛(会话化)
这种模式也涉及顺序数据,就像运行总计一样,但它使用不同的窗口函数。
