省时提效!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 窗口函数!的主要内容,如果未能解决你的问题,请参考以下文章

39个必知必会的SQL 性能调优方法

10个必知必会的PyCharm使用技巧

10个必知必会的统计学问题

Dubbo35个必知必会的点,面试总问到!

ElasticsearchElasticsearch 25 个必知必会的默认值

好奇?!Elasticsearch 25 个必知必会的默认值