省时提效!5个必知必会的sql窗口函数!(代码片段)

Python学习与数据挖掘 Python学习与数据挖掘     2022-12-03     577

关键词:

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学习与数据挖掘,后台回复:加群

在这里插入图片描述

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

...么?假设检验的内涵和步骤?这篇文章带你来看10个必知必会的统计学问题。正文来源:计量经济学1、问:自由度是什么?怎样确定?答:ÿ 查看详情

elasticsearchelasticsearch25个必知必会的默认值

1.概述转载:https://elastic.blog.csdn.net/article/details/106464359题记:技术交流群中有小伙伴提及:“es节点默认1000个分片的限制”?这引发了我对Elasticsearch默认值的关注。我一搜不要紧:聊天记录中涉及“默认”关... 查看详情

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

题记:技术交流群中有小伙伴提及:“es节点默认1000个分片的限制”?这引发了我对Elasticsearch默认值的关注。我一搜不要紧:聊天记录中涉及“默认”关键词的讨论接近400多处。这些默认值对于架构选型、开发实战、运维排查... 查看详情

6个必知必会高效python编程技巧

编写更好的Python代码需要遵循Python社区制定的最佳实践和指南。遵守这些标准可以使您的代码更具可读性、可维护性和效率。本文将展示一些技巧,帮助您编写更好的Python代码文章目录遵循PEP8风格指南1.遵守PEP8命名约定2.使... 查看详情

必知必会的设计原则——合成复用原则(代码片段)

 设计原则系列文章 必知必会的设计原则——单一职责原则必知必会的设计原则——开放封闭原则必知必会的设计原则——依赖倒置原则必知必会的设计原则——里氏替换原则必知必会的设计原则——接口隔离原则必知必... 查看详情

架构实践架构师必知必会的5种业界主流的架构风格

 【架构实践】架构师必知必会的5种业界主流的架构风格目录 【架构实践】架构师必知必会的5种业界主流的架构风格 查看详情

架构实践架构师必知必会的5种业界主流的架构风格

 【架构实践】架构师必知必会的5种业界主流的架构风格目录 【架构实践】架构师必知必会的5种业界主流的架构风格 查看详情

elasticsearch必知必会的干货知识二:es索引操作技巧(代码片段)

该系列上一篇文章《Elasticsearch必知必会的干货知识一:ES索引文档的CRUD》讲了如何进行index的增删改查,本篇则侧重讲解说明如何对index进行创建、更改、迁移、查询配置信息等。仅创建索引:PUTindexPUT/index添加字段设置(mappings... 查看详情

大数据必知必会的-linux命令(代码片段)

用户的创建和删除命令用户创建和密码设置useradd用户名passwd用户名useradditheima#创建新用户itheimapasswditheima#设置用户itheima密码用户删除user-r用户名userdel-ritheima#删除用户itheima权限管理命令文件权限概述Linux操作系统是多任务多用... 查看详情

大数据必知必会的-linux命令(代码片段)

用户的创建和删除命令用户创建和密码设置useradd用户名passwd用户名useradditheima#创建新用户itheimapasswditheima#设置用户itheima密码用户删除user-r用户名userdel-ritheima#删除用户itheima权限管理命令文件权限概述Linux操作系统是多任务多用... 查看详情

大数据必知必会的-linux命令(代码片段)

终端命令格式command[-options][parameter]说明:command:命令名,相应功能的英文单词或单词的缩写[-options]:选项,可用来对命令进行控制,也可以省略parameter:传给命令的参数,可以是零个、一个或者多个显示文件列表命令ls是英文单词list的简... 查看详情

大数据必知必会的-linux命令(代码片段)

终端命令格式command[-options][parameter]说明:command:命令名,相应功能的英文单词或单词的缩写[-options]:选项,可用来对命令进行控制,也可以省略parameter:传给命令的参数,可以是零个、一个或者多个显示文件列表命令ls是英文单词list的简... 查看详情

大数据必知必会的-linux命令(代码片段)

文件操作命令touch命令touch命令创建文件touch文件路径toucha.txt#在当前目录创建a.txt文件touch/root/a.txt#在/root目录创建a.txt文件mv命令通过mv命令可以用来移动文件或目录,也可以给文件或目录重命名1)将文件移动另一个目录中࿱... 查看详情

持续更新,建议收藏python必知必会的知识点,极大提升开发效率(代码片段)

问题本文主要介绍Python编程的一些必知必会的知识点,方便后续编程,提升效率。方法字符串转整数#字符串是普通整数a=int('1000')print(a)#1000#字符串是二进制b=int('1000',2)print(b)#8#整数转固定长度的二进制... 查看详情

linux必知必会的基本命令和部署项目流程(代码片段)

Linux的基本命令Linux下我们的输入被以空格(个数不限)分割成多个部分(命令+参数),如果某个部分中自带空格,需要使用引号引起来。命令一般自带帮助文档,使用命令--help查看。命令的大多数选项都是-[字母]或--[字母]... 查看详情

持续更新,建议收藏python必知必会的知识点,极大提升开发效率(代码片段)

问题本文主要介绍Python编程的一些必知必会的知识点,方便后续编程,提升效率。方法整数列表join设有一个整数列表,实现连接所有整数形成一个字符串,如下:d=[1,2,3,4]print(''.join(d))很遗憾,上... 查看详情

《sql必知必会》读书笔记上(第1~15章)(代码片段)

目录第1章了解SQL第2章MySQL简介第3章使用MySQL3.1连接数据库3.2选择数据库3.3显示数据库和表3.4其他SHOW语句第4章检索数据4.1SELECT语句4.2检索单个列4.3检索多个列4.4检索所有列4.5检索不同的行(去重)4.6限制结果4.7使用完全... 查看详情

必知必会的设计原则——依赖倒置原则(代码片段)

概述开放封闭原则是面向对象的设计的中级目标,而依赖倒置原则是实现开放封闭原则的基础。如果开放封闭原则是设计大楼的蓝田,那么依赖倒置原则就是大楼的钢铁架构。高层模块(调用者)不应该依赖于低层模块(被调用... 查看详情