当前位置: 首页 > article >正文

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

在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。

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


http://www.kler.cn/a/458673.html

相关文章:

  • 软件测试之单元测试
  • 技术周总结 12.23~12.29 周日(C#异步线程及调试)
  • 网络畅通无阻:计算机网络知识点复习指南
  • Empire Lupin One靶机
  • AIGC多模态生成模型的演进:图像与视频生成算法的协同发展(附代码与详细教程)
  • .net core 的软件开发方法论
  • 【Go】:Sentinel 动态数据源配置指南
  • C++ 设计模式
  • RabbitMQ中的异步Confirm模式:提升消息可靠性的利器
  • docker oracle一些报错处理--失败记录
  • table 表格转成 excell 导出
  • windows C#-拆分类和方法
  • leetcode hot 100 全排列
  • 《HelloGitHub》第 105 期
  • Dockerfile基础指令
  • SonarQube相关的maven配置及使用
  • 【k8s】Calico网络
  • Linux中sh脚本发邮件配置
  • arcgis server ip修改后服务异常解决方案
  • 阿里云clb是什么