postgresql-窗口函数种类

postgresql-聚合窗口函数

  • 聚合函数
  • 排名窗口函数
    • 案例1
    • 案例2
  • 取值窗口函数
    • 环比增长率
    • 同比增长率

聚合函数

常用的聚合函数,例如 AVG、SUM、COUNT 等,也可以作为窗口函数使用

--计算移动平均值
select saledate, amount, avg(amount) over (order by saledate rows between 1
preceding and 1 following)from sales_data
where product = '桔子' and channel = '淘宝';

在这里插入图片描述

排名窗口函数

在这里插入图片描述

案例1

-- 计算员工部门薪资排名
select 
e.first_name,
e.last_name ,
e.department_id ,
e.salary,
row_number() over(partition by e.department_id order by e.salary),
rank() over(partition by e.department_id order by e.salary) ,
dense_rank() over(partition by e.department_id order by e.salary) ,
percent_rank()  over(partition by e.department_id order by e.salary) 
from employees e;

在这里插入图片描述
4 个窗口函数的 OVER 子句完全相同,此时可以采用一种更简单的写法

-- 计算员工部门薪资排名
select 
e.first_name,
e.last_name ,
e.department_id ,
e.salary,
row_number() over w,
rank() over w ,
dense_rank() over w ,
percent_rank()  over w 
from employees e
-- 定义窗口(在sql语句的最后)
window w as (partition by e.department_id order by e.salary)
;

案例2

-- 计算员工部门薪资排名
select 
e.first_name,
e.last_name ,
e.department_id ,
e.salary,
cume_dist() over w as "累积占比",
ntile(5) over w as "相对位置"from employees e
-- 定义窗口(在sql语句的最后)
window w as (partition by e.department_id order by e.salary)
;

在这里插入图片描述

取值窗口函数

取值窗口函数用于返回指定位置上的数据。常见的取值窗口函数包括:

  • FIRST_VALUE,返回窗口内第一行的数据
  • LAST_VALUE,返回窗口内最后一行的数据
  • NTH_VALUE,返回窗口内第 N 行的数据
  • LAG,返回分区中当前行之前的第 N 行的数据
  • LEAD,返回分区中当前行之后第 N 行的数据
    其中,LAG 和 LEAD 函数不支持动态的窗口大小(frame_clause),而是以当前分区作为分析的窗口。
/** first_value、last_value 以及 NTH 函数分别获取每个部门内部月薪最高、月薪最低以及月薪第三高的员工* */
select 
e.first_name,
e.last_name ,
e.department_id ,
e.salary ,
first_value(e.salary) over(partition by e.department_id order by e.salary),
last_value(e.salary) over(partition by e.department_id order by e.salary),
nth_value(e.salary,3) over(partition by e.department_id order by e.salary)
from employees e;

在这里插入图片描述

环比增长率

LAG 和 LEAD 函数同样用于计算销量数据的环比/同比增长

-- 首先,创建一个通用表表达式 sales_monthly,得到了不同产品每个月的销量汇总;
-- LAG(sum_amount, 1)表示获取上一期的销量;当前月份的销量减去上个月的销量,再除以上个月
-- 的销量,就是环比增长率
WITH sales_monthly AS (SELECT product, to_char(saledate,'YYYYMM') ym, sum(amount) sum_amountFROM sales_dataGROUP BY product, to_char(saledate,'YYYYMM')
)
SELECT product AS "产品", ym "年月", sum_amount "销量",(sum_amount - LAG(sum_amount, 1) OVER (PARTITION BY product ORDER BY
ym))/LAG(sum_amount, 1) OVER (PARTITION BY product ORDER BY ym) * 100 AS "
环比增长率(%)"FROM sales_monthly
ORDER BY product, ym;

在这里插入图片描述

同比增长率

-- 2019年1月份数据 -2018年1月份数据,然后再和2018年1月份数据进行对比
-- 两年之间的相同月份
select 
s.*,
100*(s.amount - lag(s.amount,12) over(partition by s.product order by s.ym))
/ lag(s.amount,12 ) over(partition by s.product order by s.ym)  as "同比增长率"
from 
sales_monthly s;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/128498.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】二叉树基础入门

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

机器学习从0到1

机器学习,即machine learning 感谢easyai的精彩讲解: easyai网址 文章目录 机器学习的概念机器学习的原理监督学习,非监督学习,强化学习监督学习非监督学习强化学习 机器学习实操的7个步骤现在举一个具体的任务来说明这些步骤1.收…

在Postman的脚本中使用pm对象获取接口的请求参数

在Postman的脚本中使用pm对象获取接口的请求参数 1、获取在Query Params中输入的参数全局变量的引用(以在header中引用为例)2、获取在Body中输入的参数3、pm对象常用用法 1、获取在Query Params中输入的参数 query params页面 在tests中写脚本做后置处…

【ArcGIS pro】-使用arcpy一次保存多个布局

在arcgis Pro中常常会创建多个地图和多个布局,本文介绍如何使用代码,一次保存多个布局文件 在arcgis pro中打开python视图 找到工程位置 在python视图中输入如下代码 保存为pdf import arcpy# 设置当前项目,这通常是一个.aprx文件 projec…

华为云云耀云服务器L实例评测|华为云耀云L搭建zerotier服务测试

0. 环境 - Win10 - 云耀云L服务器 1. 安装docker 检查yum源,本EulerOS的源在这里: cd /etc/yum.repos.d 更新源 yum makecache 安装 yum install -y docker-engine 运行测试 docker run hello-world 2. 运行docker镜像 默认配…

【广州华锐互动】AR远程协助技术提供实时远程协作和指导

随着科技的不断发展,企业的运营管理模式也在不断地进行创新和升级。在这个过程中,AR(增强现实)技术的应用逐渐成为了企业运维管理的新兴趋势。AR远程协助平台作为一种结合了AR技术和远程协助理念的技术手段,为企业运维…

信息安全技术 办公设备安全测试方法

声明 本文是学习GB-T 38558-2020 信息安全技术 办公设备安全测试方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 办公设备安全测试方法范围 本标准规定了办公设备安全技术要求和安全管理功能要求的测试方法。 本标准适用于测试机构、办公设备厂…

Edge浏览器没有让我失望! 今天终于可以在win10中模拟IE内核进行前端测试了!

前言 😝 ietest现在是不是不好用了? Edge浏览器仿真是不是不见了? 如图 如果我们在前端开发javascript遇见一些老旧的语法标准,想要测试一下都难,想想都抓狂!😤😤 不过不用担心,经过这几天的…

Idea上传gitee注意事项,push reject错误

一、 你在项目所在文件夹的空白处,鼠标右键,点击git bash here 会自动进入该目录下 二、 如果你遇到push reject 输入下面的命令: git pull origin master –allow-unrelated-historiesgit push -u origin master -f再次push就好了。 三、 …

wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。

C# 用USB虚拟串口下载大文件 每包400万字节 平均0.7s/M。支持批量多设备同时下载。自动识别串口。可自由定制。 int 32位有符号整数 -2147483648~2147483647 但500万字节时 write时报端口IO异常。可能是驱动限制的。 之前用这个助手发文件,连续发送&#xff0…

【python爬虫】批量识别pdf中的英文,自动翻译成中文上

不管是上学还是上班,有时不可避免需要看英文文章,特别是在写毕业论文的时候。比较头疼的是把专业性很强的英文pdf文章翻译成中文。我记得我上学的时候,是一段一段复制,或者碰到不认识的单词就百度翻译一下,非常耗费时间。本文提供批量识别pdf中英文的方法,后续文章实现自…

PatchMatchNet 学习笔记 译文 深度学习三维重建

9 PatchMatchNet CVPR-2021 patchmatchnet源码下载 PatchMatchNet 代码注释版 下载链接(注释非常详细,较源码结构有调整,使用起来更方便) PatchMatchNet-CVPR-2021(源码、原文+注释+译文+批注) 9.0 主要特点 金字塔,基于传统的PatchMatch算法,精度高,速度快 Pa…

后端SpringBoot+前端Vue前后端分离的项目(二)

前言:完成一个列表,实现表头的切换,字段的筛选,排序,分页功能。 目录 一、数据库表的设计 ​编辑二、后端实现 环境配置 model层 mapper层 service层 service层单元测试 controller层 三、前端实现 interface接…

网管实战⑼:配置华为S5720交换机

配置好汇聚交换机后,需要根据单位情况配置具体的接入交换机。 自从2019年12月底配置好交换机后,基本上都没有怎么操作交换机了。那时候使用的是H3C交换机,主要是H3C S7706、H3C S5120、H3C S5130、H3C S5500、H3C S3600等型号的交换机&#x…

快速排序详解

前言 快排是不稳定的排序,快排的适用场景是无序的序列,例如此时有一个数组是有序的 / 逆序的,此时的快排效率是最慢的。 过程: 找一个基准值,找的过程就以挖坑法的方式填坑,第一次排序以挖坑发填完坑之后&a…

mfc 浮动窗口

参考 MFC模拟360悬浮窗加速球窗口

yolo物体检测系列实战1:yolo-v1整体思想与网络架构

1、物体检测经典方法 two-stage(两阶段):Faster-rcnn Mask-Rcnn系列one-stage(单阶段):YOLO系列 最核心的优势:速度非常快,适合做实时检测任务!但是缺点也是有的&#x…

ue5 物理场的应用

cable mat wpo particle 流体粒子 choas 破损 刚体 布料 cloud abp blueprint riggedbody 体积雾 毛发 全局的 局部的 非均匀的 连续变化的 也可以多个叠加 从全局 到 范围 除了vector还有scalar的值也就是0--1的黑白灰的值 但是最终输出的值的类型还是取决于这个 一…

渗透测试漏洞原理之---【不安全的反序列化】

文章目录 1、序列化与反序列化1.1、引入1.2、序列化实例1.2.1、定义一个类1.2.2、创建 对象1.2.3、反序列化1.2.4、对象注入 2、漏洞何在2.1、漏洞触发2.1.2、定义一个类2.1.3、定义一个对象2.1.3、反序列化执行代码 2.2 为什么会这样 3、反序列化漏洞攻防3.1、PHP反序列化实例…

51单片机的简易计算器数码管显示仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

51单片机的简易计算器数码管显示仿真设计 1.主要功能:2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接 51单片机的简易计算器数码管显示仿真设计( proteus仿真程序原理图报告讲解视频) 仿真图proteus7.8及以上 程序编译器…