首页 > 数据库 >PostgreSQL中FIRST_VALUE、LAST_VALUE、LAG 和 LEAD是窗口函数,允许返回在数据集的特定窗口(或分区)内访问行的相对位置

PostgreSQL中FIRST_VALUE、LAST_VALUE、LAG 和 LEAD是窗口函数,允许返回在数据集的特定窗口(或分区)内访问行的相对位置

时间:2024-12-29 15:55:25浏览次数:3  
标签:salary LAST LEAD OVER LAG VALUE 窗口 ORDER

在PostgreSQL中,FIRST_VALUELAST_VALUELAGLEAD 是窗口函数(window functions),它们允许你在数据集的特定窗口(或分区)内访问行的相对位置。以下是对这些函数的详细解释和用法:

1. FIRST_VALUE

FIRST_VALUE 函数返回在指定窗口或分区内的第一行的值。它常用于获取每个组的起始值。

语法

FIRST_VALUE(column_name) OVER ([PARTITION BY partition_expression] ORDER BY sort_expression [ROWS or RANGE frame_clause])

示例

SELECT 
    employee_id, 
    department_id, 
    salary, 
    FIRST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY salary) AS first_salary_in_dept
FROM 
    employees;

这将为每个部门返回按工资排序后的第一(最低,如果升序)个员工的工资。

2. LAST_VALUE

LAST_VALUE 函数返回在指定窗口或分区内的最后一行的值。它常用于获取每个组的结束值。

语法

LAST_VALUE(column_name) OVER ([PARTITION BY partition_expression] ORDER BY sort_expression [ROWS or RANGE frame_clause])

示例

SELECT 
    employee_id, 
    department_id, 
    salary, 
    LAST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY salary) AS last_salary_in_dept
FROM 
    employees;

这将为每个部门返回按工资排序后的最后(最高,如果升序)个员工的工资。

3. LAG

LAG 函数返回窗口中当前行的前N行的值。它用于访问当前行的前几行的数据。

语法

LAG(column_name, offset, default_value) OVER ([PARTITION BY partition_expression] ORDER BY sort_expression)
  • offset:要回溯的行数(默认为1)。
  • default_value:如果回溯的行数超出窗口范围,则返回此默认值(可选)。

示例

SELECT 
    employee_id, 
    salary, 
    LAG(salary, 1) OVER (ORDER BY salary) AS previous_salary
FROM 
    employees;

这将为每行返回前一个员工的工资(按工资排序)。如果这是第一行,则 previous_salary 将为NULL,除非你指定了一个默认值。

4. LEAD

LEAD 函数返回窗口中当前行的后N行的值。它用于访问当前行的后几行的数据。

语法

LEAD(column_name, offset, default_value) OVER ([PARTITION BY partition_expression] ORDER BY sort_expression)
  • offset:要前瞻的行数(默认为1)。
  • default_value:如果前瞻的行数超出窗口范围,则返回此默认值(可选)。

示例

SELECT 
    employee_id, 
    salary, 
    LEAD(salary, 1) OVER (ORDER BY salary) AS next_salary
FROM 
    employees;

这将为每行返回下一个员工的工资(按工资排序)。如果这是最后一行,则 next_salary 将为NULL,除非你指定了一个默认值。

注意事项

  • 这些函数通常与 OVER 子句一起使用,其中可以指定分区(PARTITION BY)和排序(ORDER BY)。
  • 如果不指定 frame_clause(即 ROWSRANGE),则默认使用整个分区作为窗口。
  • LAGLEAD 函数中的 offset 默认为1,表示前一行或后一行。
  • 如果 LAGLEAD 函数中的回溯或前瞻行数超出窗口范围,并且没有指定 default_value,则结果将为NULL。

通过这些函数,你可以灵活地访问和操作数据行之间的相对位置,从而进行更复杂的数据分析和处理。

标签:salary,LAST,LEAD,OVER,LAG,VALUE,窗口,ORDER
From: https://blog.csdn.net/zxrhhm/article/details/144806074

相关文章

  • Oracle数据库中FIRST_VALUE、LAST_VALUE、LAG和LEAD是用于在窗口函数中进行数据行之间
    在Oracle数据库中,FIRST_VALUE、LAST_VALUE、LAG和LEAD是用于在窗口函数中进行数据行之间相对位置访问的函数。下面分别介绍这些函数的作用和用法。1.FIRST_VALUEFIRST_VALUE函数返回在指定窗口帧内的第一行的值。常用于在分组或排序的上下文中获取某一组的起始值。......
  • 【Elasticsearch】数据分布与路由机制
    ......
  • 006. 滑动窗口 /【模板】单调队列(洛谷P1886)
    006.滑动窗口/【模板】单调队列(洛谷P1886)题目描述有一个长为\(n\)的序列\(a\),以及一个大小为\(k\)的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。例如,对于序列\([1,3,-1,-3,5,3,6,7]\)以及\(k=3\),有如下过程:\[\def\a......
  • MySQL General error: 1364 Field 'XXX' doesn't have a default value
    向数据库中插入数据时报了以上错误,其原因为:MySQL使用了严格验证方式解决办法mysql设置的问题,有my.ini的就找这个文件,没有的就找my.cnf(这个一般都在/ect/my.conf)直接把[mysqld]模块下的sql-mode模式改变下,找到sql-mode,然后把这句删掉,改成:sql_mode=NO_ENGINE_SUBSTITU......
  • [VUE]CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足 errno134
    使用vscode开发项目,由于项目较大,在运行npmrundev命令后,在一定的时间范围内,对vscode中的代码进行保存后,会自动编译运行,保存几次后就报错,需要重新运行npmrundev,很耗费时间)后报错报错:CALL_AND_RETRY_LASTAllocationfailed-JavaScriptheapoutofmemory(CALL_AND_RETRY_LAS......
  • Elasticsearch:normalizer
    一、概述‌Elasticnormalizer‌是Elasticsearch中用于处理keyword类型字段的一种工具,主要用于对字段进行规范化处理,确保在索引和查询时保持一致性。Normalizer与analyzer类似,都是对字段进行处理,但normalizer不会对字段进行分词,即没有tokenizer。它主要用于keyword类型的......
  • ES elasticsearch-8.17.0-windows-x86_64使用
    1、下载ES(elasticsearch简称ES下载链接:https://www.elastic.co/downloads/elasticsearch)ES下载链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-windows-x86_64.zip)),需要在修改ES配置,进入ES解压以后的文件下的config目录,找到elasticsearc......
  • Spring Boot 项目中 @Value 注解失效问题
    问题描述在SpringBoot项目中,我们使用@Value注解从application.yml配置文件中注入配置值。但是,由于同事直接new创建了含有@Value注解的类实例,导致注解失效。配置文件application.ymlyaml#${service-model}读取的是pom.xml文件中自定义的属性,可以直接定义,例如:te......
  • EasyPlayer.js视频流媒体播放器windows播放器多窗口播放音量的控制方法
    随着互联网技术的飞速发展和移动设备的普及,流媒体服务已经成为人们消费娱乐内容的主要途径之一。流媒体行业已经成为一个巨大的娱乐产业生态,各个环节都在不断发生着创新和变革。这些技术的发展不仅改变了内容的创作和分发方式,也为用户带来了更加丰富和个性化的体验。那么在实际......
  • ElasticSearch normalizer与analyzer的区别
    ElasticSearchnormalizer与analyzer的区别1、区别normalizer与analyzer的作用类似,都是对字段进行处理,但是不同之处在于normalizer不会对字段进行分词,也就是说normalizer没有tokenizera所以normalizer是作用于keyword类型的字段的,相当于我们需要给keyword类型字段做一个额外的处......