PostgreSQL 教程: lag 函数

八月 28, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的LAG()函数,访问当前行之前特定物理偏移量的行。

目录

PostgreSQL LAG() 函数介绍

PostgreSQL 的LAG()函数提供对当前行之前指定物理偏移量的行的访问。换句话说,LAG()函数可以从当前行访问前一行的数据,或者前一行之前的行,依此类推。

LAG()函数对于比较当前行和前一行的值非常有用。

LAG()函数的语法如下所示:

LAG(expression [,offset [,default_value]]) 
OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

在这个语法中:

expression

expression是根据当前行之前指定偏移量的行进行计算的。它可以是列、表达式或 子查询。expression必须返回单个值,并且不能是 窗口函数。

offset

offset是一个正整数,指定要从中访问数据的当前行之前的行数。offset可以是表达式、子查询或列。如果不指定则默认为 1。

default_value

如果offset超出分区范围,LAG()函数将返回default_value。如果省略default_value,则该函数将返回 NULL。

PARTITION BY 子句

PARTITION BY子句将行划分为应用LAG()函数的分区。

默认情况下,如果省略PARTITION BY子句,该函数会将整个结果集视为单个分区。

ORDER BY 子句

ORDER BY子句指定应用LAG()函数的每个分区中的行的顺序。

PostgreSQL LAG() 函数示例

我们将使用LEAD()函数教程中的sales表进行演示。

这是sales表的数据:

Sales sample table

1) 在结果集上使用 LAG() 函数的示例

本例使用LAG()函数返回本年和上一年的销售额:

WITH cte AS (
	SELECT 
		year, 
		SUM(amount) amount
	FROM sales
	GROUP BY year
	ORDER BY year
) 
SELECT
	year, 
	amount,
	LAG(amount,1) OVER (
		ORDER BY year
	) previous_year_sales
FROM
	cte;

这是输出:

PostgreSQL LAG Function Over a Result Set Example

在这个例子中:

  • 首先,CTE 返回按年份汇总的净销售额。
  • 然后,外部查询使用LAG()函数返回每行上一年的销售额。第一行的previous_year_sales列中有 NULL,因为第一行没有上一年。

下面示例使用两个公共表表达式来返回当前年份和往年之间的销售额差异:

WITH cte AS (
	SELECT 
		year, 
		SUM(amount) amount
	FROM sales
	GROUP BY year
	ORDER BY year
), cte2 AS (
	SELECT
		year, 
		amount,
		LAG(amount,1) OVER (
			ORDER BY year
		) previous_year_sales
	FROM
		cte
)	
SELECT 
	year, 
	amount, 
	previous_year_sales,  
	(previous_year_sales - amount) variance
FROM 
	cte2;

PostgreSQL LAG Function Over a Result Set Example 2

2) 在分区上使用 LAG() 函数的示例

本示例使用LAG()函数来比较每个产品组当前年份的销售额与上一年的销售额:

SELECT
	year, 
	amount,
	group_id,
	LAG(amount,1) OVER (
		PARTITION BY group_id
		ORDER BY year
	) previous_year_sales
FROM
	sales;

该图显示了输出:

PostgreSQL LAG Function Over a Partition Example

在这个例子中:

  • PARTITION BY子句将行分配到由组 ID 指定的产品组(或分区)中。
  • ORDER BY子句按年份升序对每个产品组中的行进行排序。
  • LAG()函数应用于每个分区以返回上一年的销售额。

在本教程中,您学习了如何使用 PostgreSQL 的LAG()函数,访问当前行之前特定物理偏移量的行。

了解更多

PostgreSQL 教程: 窗口函数

PostgreSQL 文档: 窗口函数

玻璃钢生产厂家营口批发供应沈阳玻璃钢花盆宁波玻璃钢金属雕塑方案舟山动物玻璃钢雕塑深圳福田商场美陈茂名玻璃钢吉祥物卡通雕塑厂家商场美陈4d球玻璃钢仿铜雕塑推碾子玻璃钢雕塑仿真树人物玻璃钢雕塑供货商宁夏小区玻璃钢雕塑安装商场里美陈是什么商场美陈怎么做方案手绘恒艺玻璃钢雕塑兰州寺庙玻璃钢雕塑扬州玻璃钢卡通雕塑厂家推广鹰潭园林景观玻璃钢雕塑西安城市玻璃钢雕塑造型贴金信阳玻璃钢浮雕不锈钢公园雕塑沈阳玻璃钢雕塑加工厂常德吉首玻璃钢雕塑报价商场儿童创意美陈广州动物造型玻璃钢卡通熊猫雕塑淮北玻璃钢雕塑定做询问报价铜陵大型户外玻璃钢雕塑天津户外玻璃钢雕塑供应商正规玻璃钢雕塑厂家高品质的选择河北玻璃钢小品雕塑维修翻新陕西玻璃钢人像雕塑辉县玻璃钢雕塑广东玻璃钢雕塑费用是多少香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化