数据科学面试中你应该知道的五个 SQL 窗口函数

源节点: 1582448

数据科学面试中你应该知道的五个 SQL 窗口函数
 

SQL 是数据世界中的通用语言,是作为数据专业人士最重要的技能。

SQL 之所以如此重要,是因为它是数据整理阶段所需的主要技能。 许多数据探索、数据操作、管道开发和仪表板创建都是通过 SQL 完成的。

优秀的数据科学家与优秀的数据科学家的区别在于,优秀的数据科学家可以在 SQL 允许的范围内尽可能多地处理数据。 能够充分使用 SQL 所提供的所有功能的一个重要部分是知道如何使用窗口函数。

话虽如此,让我们深入研究吧!

1. 带有 LEAD() 和 LAG() 的增量

 
LEAD() 和 LAG() 主要用于将某个时间段与给定指标的前一个时间段进行比较。 举几个例子……

  • 您可以获得每年销售额与上一年销售额之间的差值
  • 您可以获得每月注册/转换/网站访问次数的增量
  • 您可以按月比较用户流失率

示例:

以下查询显示如何查询成本的每月百分比变化

with monthly_costs as ( SELECT date , monthlycosts , LEAD(monthlycosts) OVER (ORDER BY date) as previousCosts FROM costs )SELECT date , (monthlycosts - previousCosts) / previousCosts * 100 AS costPercentChange FROM monthly_costs

2. 使用 SUM() 或 COUNT() 求和

 
可以通过以 SUM() 或 COUNT() 开头的 windows 函数简单地计算运行总计。 当您想要显示特定指标随时间的增长时,这是一个强大的工具。 更具体地说,它在以下情况下很有用:

  • 获得一段时间内的总收入和成本
  • 获取每个用户在应用程序上花费的总时间
  • 获取一段时间内的总转化次数

示例:

以下示例显示了如何包含每月费用的累积总和列:

SELECT date , monthlycosts , SUM(monthlycosts) OVER (ORDER BY date) as cumCosts FROM cost_table

3. 使用 AVG() 的移动平均线

 
AVG() 在 Windows 函数中非常强大,因为它允许您计算 移动平均线 随着时间的推移。

移动平均线是一种简单但有效的短期预测值的方法。 它们在平滑图表上的波动曲线方面也非常有用。 通常,移动平均线用于衡量事物移动的大致方向。

进一步来说…

  • 它们可用于获取每周销售额的总体趋势(平均值是否会随着时间的推移而上升?)。 这将表明作为一家公司的增长。
  • 它们同样可用于获取每周转换或网站访问的总体趋势。

示例:

以下查询是获取转化次数的 10 天移动平均值的示例。

SELECT Date , dailyConversions , AVG(dailyConversions) OVER (ORDER BY Date ROWS 10 PRECEDING) AS 10_dayMovingAverage FROM conversions

4.行号()

 
当您想要获取第一条或最后一条记录时,ROW_NUMBER() 特别有用。 例如,如果您有一张健身房成员何时来健身房的表格,并且您想获取他们来健身房的第一天的日期,您可以 PARTITION BY customer (name/id) 和 ORDER BY purchase date。 然后,为了获得第一行,您可以简单地过滤 rowNumber 等于 XNUMX 的行。

示例:

此示例显示如何使用 ROW_NUMBER() 获取每个成员(用户)访问的第一个日期。

with numbered_visits as ( SELECT memberId , visitDate , ROW_NUMBER() OVER (PARTITION BY customerId ORDER BY purchaseDate) as rowNumber FROM gym_visits )SELECT * FROM numbered_visits WHERE rowNumber = 1

回顾一下,如果您需要获取第一条或最后一条记录,ROW_NUMBER() 是实现这一目标的好方法。

5. 使用 DENSE_RANK() 进行记录排名

 
DENSE_RANK() 与 ROW_NUMBER() 类似,只是它为相等的值返回相同的排名。 在检索顶级记录时,密集排名非常有用,例如:

  • 如果你想拉出本周观看次数最多的 10 部 Netflix 节目
  • 如果您想根据花费的金额获得前 100 名用户
  • 如果您想查看 1000 个最不活跃用户的行为

示例:

如果您想按总销售额对顶级客户进行排名,则 DENSE_RANK() 将是一个合适的函数。

SELECT customerId , totalSales , DENSE_RANK() OVER (ORDER BY totalSales DESC) as rank FROM customers

谢谢阅读!

 
就这样! 我希望这对你的面试准备有所帮助——我敢肯定,如果你彻底了解这 5 个概念,那么当涉及到大多数 SQL 窗口函数问题时,你会做得很好。

与往常一样,我祝愿你在学习中取得最好的成绩!

 
 
特伦斯·辛(Terence Shin) 是一名数据爱好者,拥有 3 年以上的 SQL 经验和 2 年以上的 Python 经验,并且是 Towards Data Science 和 KDnuggets 的博主。

原版。 经许可重新发布。

资料来源:https://www.kdnuggets.com/2022/01/top-five-sql-window-functions-know-data-science-interviews.html

时间戳记:

更多来自 掘金队