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

oracle 窗口函数使用

Oracle 数据库中的窗口函数(也称为分析函数或OLAP函数)允许您对一组相关的行执行计算,而不是只针对单行。这些函数在数据分析中特别有用,因为它们允许您执行诸如计算移动平均值、累积总和、百分比排名等操作。

以下是一些常用的 Oracle 窗口函数和它们的使用示例:

  1. ROW_NUMBER():为结果集中的每一行分配一个唯一的序号。

SELECT employee_id, first_name, last_name, department_id,  ROW_NUMBER() OVER (ORDER BY department_id, salary DESC) as rn  
FROM employees;
  1. RANK() 和 DENSE_RANK():为结果集中的每一行分配一个排名。它们的区别在于处理并列排名的方式不同。

SELECT employee_id, first_name, last_name, salary,  RANK() OVER (ORDER BY salary DESC) as rank,  DENSE_RANK() OVER (ORDER BY salary DESC) as dense_rank  
FROM employees;
  1. NTILE(n):将结果集分成 n 个大致相等的部分,并为每一行分配一个桶号(从1到n)。

SELECT employee_id, first_name, last_name, salary,  NTILE(4) OVER (ORDER BY salary DESC) as quartile  
FROM employees;
  1. SUM() OVER():计算累积总和。

SELECT employee_id, first_name, last_name, salary,  SUM(salary) OVER (ORDER BY department_id, employee_id) as cumulative_salary  
FROM employees;
  1. AVG() OVER():计算移动平均值。

SELECT employee_id, first_name, last_name, salary,  AVG(salary) OVER (ORDER BY employee_id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) as avg_salary_3_rows  
FROM employees;
  1. LEAD() 和 LAG():访问结果集中的前一行或后一行的值。

SELECT employee_id, first_name, last_name, salary,  LEAD(salary) OVER (ORDER BY employee_id) as next_salary,  LAG(salary) OVER (ORDER BY employee_id) as prev_salary  
FROM employees;
  1. FIRST_VALUE() 和 LAST_VALUE():返回窗口中的第一行或最后一行的值。

SELECT employee_id, first_name, last_name, salary,  FIRST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY salary DESC) as max_salary_in_dept,  LAST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY salary ASC) as min_salary_in_dept  
FROM employees;
  1. CUME_DIST():计算当前行的值相对于窗口中的值的相对位置(0到1之间)。
  2. PERCENT_RANK():与 RANK() 类似,但返回的是百分比排名(0到1之间)。

请注意,在窗口函数中使用 OVER() 子句时,您可以指定 PARTITION BY 子句来定义窗口如何分区,以及 ORDER BY 子句来定义窗口中的行如何排序。这些选项允许您更精细地控制窗口函数的行为。

http://www.lryc.cn/news/382590.html

相关文章:

  • 【Git】git常用命令
  • 【Proteus仿真】【Arduino单片机】寻迹避障蓝牙遥控小车
  • 嵌入式实验---实验八 ADC电压采集实验
  • PHP框架详解:Symfony框架的深度剖析
  • Linux `screen` 命令详解与使用指南
  • CSRF绕过
  • 如何处理Java中的BufferOverflowException异常?
  • XMLTomcatHttp协议
  • Lua优化技巧
  • 探索CSS中的cursor鼠标属性
  • 图象去噪1-使用中值滤波与均值滤波
  • 微软Edge浏览器全解析
  • Windows操作系统安装mysql数据库(zip安装包)
  • 什么是仓颉编程语言?
  • ONLYOFFICE8.1-------宝藏级别桌面编辑器测评
  • 微信小程序笔记 七!
  • GPT-5的即将登场:新一代大语言模型的无限可能
  • 微信小程序的常用事件的用法
  • 前端 CSS 经典:保持元素宽高比
  • MES工业一体机的自动化控制技术
  • 三品PDM电子行业解决方案介绍 电子企业PDM应用效果
  • 模拟面试之外卖点单系统(高频面试题目mark)
  • SwiftUI 6.0(iOS 18/macOS 15)关于颜色 Color 的新玩法
  • C++核心编程运算符的重载
  • 雷达标定与解析
  • 养殖自动化温控系统:现代养殖场的智能守护神
  • 用python打印——九九乘法表2
  • 如何系统学习机器学习?
  • Qt:1.杂谈
  • AI视频模型Sora核心功能以及应用场景