postgresql-窗口函数

postgresql-窗口函数

  • 窗口函数简介
  • 窗口函数的定义
    • 分区
    • 排序选项
    • 窗口选项

窗口函数简介

包括 AVG、COUNT、MAX、MIN、SUM 以及
STRING_AGG。聚合函数的作用是针对一组数据行进行运算,并且返回一条汇总结果
分析的窗口函数(Window Function)。
不过,窗口函数不是将一组数据汇总为单个结果,而是针对每一行数据,基于和它相关的一组数
据计算出一个结果。下图演示了聚合函数和窗口函数的区别
在这里插入图片描述
区别在于后者包含了 OVER 关键字;空括号表示将所有数据作为整体进行分析,所以得到的数值和聚合函数一样

窗口函数的定义

window_function ( expression, ... ) OVER (PARTITION BY ...ORDER BY ...frame_clause
)

window_function 是窗口函数的名称;expression 是函数参数,有些函数不需要参数;
over 子句包含三个选项:分区(partition by)、排序(order by)以及窗口大小
frame_clause

分区

-- 计算员工的部门平均薪水
-- partition by分组统计,和group by 类似
select 
e.employee_id ,
e.first_name ,
e.last_name ,
e.salary ,
e.department_id ,
round(avg(e.salary) over(partition by e.department_id),2) as avg_sal
from employees e;

在这里插入图片描述
partition by 选项用于定义分区,作用类似于 group by 的分组。如果指定了分区选项,
窗口函数将会分别针对每个分区单独进行分析;如果省略分区选项,所有的数据作为一个整体进
行分析

排序选项

order by 选项用于指定分区内的排序方式,通常用于数据的排名分析

-- 员工在部门内薪水排名
select 
e.employee_id ,
e.first_name ,
e.last_name,
e.salary ,
e.department_id ,
rank() over(partition by e.department_id order by e.salary desc)
from employees e;

在这里插入图片描述

窗口选项

frame_clause 选项用于在当前分区内指定一个计算窗口。指定了窗口之后,分析函数不再基
于分区进行计算,而是基于窗口内的数据进行计算

-- public.sales_monthly definition-- Drop table-- DROP TABLE public.sales_monthly;CREATE TABLE public.sales_monthly (product varchar(20) NULL,ym varchar(10) NULL,amount numeric(10, 2) NULL
);
INSERT INTO public.sales_monthly (product,ym,amount) VALUES('苹果','201801',10159.00),('苹果','201802',10211.00),('苹果','201803',10247.00),('苹果','201804',10376.00),('苹果','201805',10400.00),('苹果','201806',10565.00),('苹果','201807',10613.00),('苹果','201808',10696.00),('苹果','201809',10751.00),('苹果','201810',10842.00);
INSERT INTO public.sales_monthly (product,ym,amount) VALUES('苹果','201811',10900.00),('苹果','201812',10972.00),('苹果','201901',11155.00),('苹果','201902',11202.00),('苹果','201903',11260.00),('苹果','201904',11341.00),('苹果','201905',11459.00),('苹果','201906',11560.00),('香蕉','201801',10138.00),('香蕉','201802',10194.00);
INSERT INTO public.sales_monthly (product,ym,amount) VALUES('香蕉','201803',10328.00),('香蕉','201804',10322.00),('香蕉','201805',10481.00),('香蕉','201806',10502.00),('香蕉','201807',10589.00),('香蕉','201808',10681.00),('香蕉','201809',10798.00),('香蕉','201810',10829.00),('香蕉','201811',10913.00),('香蕉','201812',11056.00);
INSERT INTO public.sales_monthly (product,ym,amount) VALUES('香蕉','201901',11161.00),('香蕉','201902',11173.00),('香蕉','201903',11288.00),('香蕉','201904',11408.00),('香蕉','201905',11469.00),('香蕉','201906',11528.00),('桔子','201801',10154.00),('桔子','201802',10183.00),('桔子','201803',10245.00),('桔子','201804',10325.00);
INSERT INTO public.sales_monthly (product,ym,amount) VALUES('桔子','201805',10465.00),('桔子','201806',10505.00),('桔子','201807',10578.00),('桔子','201808',10680.00),('桔子','201809',10788.00),('桔子','201810',10838.00),('桔子','201811',10942.00),('桔子','201812',10988.00),('桔子','201901',11099.00),('桔子','201902',11181.00);
INSERT INTO public.sales_monthly (product,ym,amount) VALUES('桔子','201903',11302.00),('桔子','201904',11327.00),('桔子','201905',11423.00),('桔子','201906',11524.00);
/** 计算每个产品当当前月份的累计销量
*/
selectm.product ,m.ym ,m.amount,sum(m.amount) over(partition by m.product order by m.ym rows between unbounded  preceding and current row)
fromsales_monthly morder by m.product,m.ym;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
常见的窗口函数可以分为以下几类:聚合窗口函数、排名窗口函数以及取值窗口函数。
更多的复杂选项可以参考官方文档

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

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

相关文章

投稿指南【NO.12_8】【极易投中】核心期刊投稿(组合机床与自动化加工技术)

近期有不少同学咨询投稿期刊的问题,大部分院校的研究生都有发学术论文的要求,少部分要求高的甚至需要SCI或者多篇核心期刊论文才可以毕业,但是核心期刊要求论文质量高且审稿周期长,所以本博客梳理一些计算机特别是人工智能相关的期…

单相并联下垂控原理

Part1 上述有个核心的piont是等效阻抗上的电压一般时很小的,这就导致逆变器输出电压矢量E和负载电压矢量UL之间的夹角很小 》基于上述的结论有助于我们去简化下垂控制的公式!!! Part2 上述得到负载电流,接着乘以负载…

mac 查看端口占用

sudo lsof -i tcp:port # 示例 sudo lsof -i tcp:8080 杀死进程 sudo kill -9 PID # 示例 sudo kill -9 8080

基于奇偶模的跨线桥(crossover)分析

文章目录 1、ADS建模2、奇偶模分析2.1 Port1→Port2传输特性2.1.1奇模分析2.1.2偶模分析 2.2 Port1→Port4传输特性 附:正交混合网络的奇偶模分析1、 Port1→Port21.1奇模分析1.2Port1→Port2偶模分析1.3 奇模传输与偶模传输相位关系![在这里插入图片描述](https://…

蚂蚁开源编程大模型,提高开发效率

据悉,日前蚂蚁集团首次开源了代码大模型 CodeFuse,而这是蚂蚁自研的代码生成专属大模型,可以根据开发者的输入提供智能建议和实时支持,帮助开发者自动生成代码、自动增加注释、自动生成测试用例、修复和优化代码等kslouitusrtdf。…

rrweb入门

rrweb 背景 rrweb 是 record and replay the web,是当下很流行的一个录制屏幕的开源库。与我们传统认知的录屏方式(如 WebRTC)不同的是,rrweb 录制的不是真正的视频流,而是一个记录页面 DOM 变化的 JSON 数组&#x…

zookeeper没有.log日志,只有.out日志

zookeeper没有.log日志,只有.out日志 背景:发现zookeeper没有.log日志,只有.out日志 发现在logs目录下,只有.out文件,且每次重启zk,.out日志都会被覆盖写 为了有完整的log日志,需要如下参数 1…

精品基于SpringCloud实现的高校招生信息管理系统-微服务-分布式

《[含文档PPT源码等]精品基于SpringCloud实现的高校招生信息管理系统-微服务-分布式》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具: 开发语言:Java 框架:springcloud JDK版本&#x…

C++:vector

目录 一、关于vector 二、vector的相关函数 三、相关函数的使用 ①构造函数 ②size ③[] ​编辑 ④push_back ⑤迭代器iterator ⑥reserve ⑦resize ⑧find ⑨insert ⑩erase ⑪sort 一、关于vector vector比较像数组 观察可知,vector有两个模板参数…

计算机图形学环境配置java3D

计算机图形学环境配置java3D JDK18(或者一些版本都无法支持Applet类)idea配置导入java3D的jar包测试代码:运行效果: java3Dwindows64位下载 这个是默认到下图路径中:(记住这个路径,待会要导入ja…

选择 Guava EventBus 还是 Spring Framework ApplicationEvent

文章首发地址 Spring Framework ApplicationEvent Spring Framework 的 ApplicationEvent 是 Spring 框架提供的一种事件机制,用于实现发布和订阅事件的功能。它基于观察者模式,允许应用程序内的组件之间进行松耦合的通信。 下面是关于 Spring Frame…

OJ练习第167题——单词接龙

单词接龙 力扣链接&#xff1a;127. 单词接龙 题目描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk&#xff1a; 每一对相邻的单词只差一个字母。 对于 1 < i < k 时&…

C语言实现三字棋

实现以下&#xff1a; 1游戏不退出&#xff0c;继续玩下一把&#xff08;循环&#xff09; 2应用多文件的形式完成 test.c. --测试游戏 game.c -游戏函数的实现 game.h -游戏函数的声明 (2)游戏再走的过程中要进行数据的存储&#xff0c;可以使用3*3的二维数组 char bor…

vue+element使用阿里的图标库保存图标

阿里图标网站iconfont-阿里巴巴矢量图标库 我想使用保存图标&#xff0c;但是element的图标库没有找到可用的&#xff0c;首先在阿里的图标网站搜索保存 发现这个还不错 点击添加入库 点击购物车 点击添加至项目 点击下载到本地 把下载的压缩包里面的文件拖到自己项目里面 在m…

华为三层交换机与路由器对接上网

华为三层交换机与路由器对接上网

高速文件扫描仪:从繁琐到高效的革命性转变

高速文件扫描仪是办公设备中的重要一员&#xff0c;其主要功能是将纸质文件快速转换为数字格式&#xff0c;从而方便存储、传输和管理。那么&#xff0c;这个设备是如何起源并逐步发展起来的呢&#xff1f; 随着信息技术的不断推进&#xff0c;人们对数字化办公的需求变得越来…

私人问答网站搭建指南:Ubuntu+Cpolar+Tipas

文章目录 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4. 公网访问测试5. 结语 前…

机车整备场数字孪生 | 图扑智慧铁路

机车整备场是铁路运输系统中的重要组成部分&#xff0c;它承担着机车的维修、保养和整备工作&#xff0c;对保障铁路运输的运维和安全起着至关重要的作用。 随着铁路运输的发展、机车技术的不断进步&#xff0c;以及数字化转型的不断推进&#xff0c;数字孪生技术在机车整备场…

在STS里使用Gradle编译Apache POI5.0.0

1、到官方下面地址下载Gradle最新的版本 Gradle Distributions 2、解压后拷贝到D盘下D:\gradle-8.3-rc-4里 3、配置环境变量 新建系统变量 GRADLE_HOME &#xff0c;值为 路径 4、在 Path 中添加上面目录的 bin 文件路径 &#xff08;可以用 %GRADLE_HOME%\bin&#xff0c…

SpingMvc入门

SpingMvc入门 1.MVC Spring的工作流程&#xff1a;2.sping mvc入门3.静态资源处理 前言 Spring MVC是一种基于Java的web应用开发框架&#xff0c;它采用了MVC&#xff08;Model-View-Controller&#xff09;设计模式来帮助开发者组织和管理应用程序的各个组件。 1.MVC Spring的…