省时提效!5个必知必会的 SQL 窗口函数!
Posted Python学习与数据挖掘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了省时提效!5个必知必会的 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() 开头的窗口函数简单地计算运行总数,这是一个强大的工具。更具体地说,它在以下情况下很有用:
- 获取一段时间内的总收入和总成本
- 获取每个用户在应用程序上花费的运行总时间
- 获取一段时间内的转换总数
以每月成本的累计总和为例
SELECT
date
, monthlycosts
, SUM(monthlycosts) OVER (ORDER BY date) as cumCosts
FROM
cost_table
3、使用 AVG() 移动平均值
AVG() 在窗口函数中非常强大,因为它允许您计算随时间推移的移动平均值。它在如下场景中非常有用:
- 获得每周销售的总趋势。
- 获得每周转换或网站访问的总趋势。
以获取转换的10天移动平均值为例
SELECT
Date
, dailyConversions
, AVG(dailyConversions) OVER (ORDER BY Date ROWS 10 PRECEDING) AS
10_dayMovingAverage
FROM
conversions
4、ROW_NUMBER()
当你想要获得第一条或最后一条记录时,ROW_unumber() 特别有用。
以如何每个成员访问日期为例。
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()
densed_RANK() 与 ROW_NUMBER()类似,不同之处在于它为相等的值返回相同的秩。在顶级检索记录时,DENSE_RANK() 非常有用,例如:
- 你想选出本周十大最受关注的节目
- 你想得到前100名用户的基础上花费
- 你想查看 1000 个最不活跃用户
以总销售额顶级客户排名为例
SELECT
customerId
, totalSales
, DENSE_RANK() OVER (ORDER BY totalSales DESC) as rank
FROM
customers
技术交流
欢迎转载、收藏、有所收获点赞支持一下!
目前开通了技术交流群,群友超过2000人,添加方式如下:
如下方式均可,添加时最好方式为:来源+兴趣方向,方便找到志同道合的朋友
- 方式一、发送如下图片至微信,进行长按识别,回复加群;
- 方式二、直接添加小助手微信号:pythoner666,备注:来自CSDN
- 方式三、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
以上是关于省时提效!5个必知必会的 SQL 窗口函数!的主要内容,如果未能解决你的问题,请参考以下文章