oracle 窗口函数使用

server/2024/10/19 11:43:08/

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.ppmy.cn/server/52762.html

相关文章

驱动保险业高质量发展 金融壹账通“保险+科技”输出“数字化红利

近日,金融监管总局局长李云泽在陆家嘴论坛指出,将推动保险业坚持内涵式发展、特色化经营和精细化管理,加快由追求速度和规模,向以价值和效益为中心转变;引导保险机构树立正确的经营观、业绩观、风险观,完善…

[word] word 如何在文档中进行分栏排版? #媒体#其他#媒体

word 如何在文档中进行分栏排版? 目标效果 将唐代诗人李白的组诗作品《清平调词》进行分栏排版,共分三栏,每一首诗作为一栏,参考效果如下图。

dp经典问题:爬楼梯

dp经典问题:爬楼梯 爬楼梯 三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。 Step1: 识别问题 这…

现在的Java面试都这么扯淡了吗?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!开发兼过半年面试官 刚开始…

突发!OpenAI停止不支持国家API,7月9日开始执行

6月25日凌晨,有部分开发者收到了OpenAI的信,“根据数据显示,你的组织有来自OpenAl目前不支持的地区的API流量。从7月9日起,将采取额外措施,停止来自不在OpenAI支持的国家、地区名单上的API使用。” 但这位网友表示&am…

Docker镜像导入导出

docker镜像的导出导入 Docker镜像的导出和导入通常使用docker save和docker load命令。 导出Docker镜像: docker save -o <path for generated tar file> <image name>例如&#xff0c;导出名为myimage:latest的镜像到名为myimage_latest.tar的文件: docker sav…

VUE div的右上角的角标/标签

一、效果图 二、代码 <div class"comp-overview"><div class"overview-item" v-for"(item,index) in overviewInfoList" :key"index"><div class"angle_mark"><span>{{item.label}}</span>&…

第9章:软件可靠性基础知识

随着软件复杂度的增加&#xff0c;软件设计的正确性验证成本也越来越高。可靠和可信的计算模型首先在军事和高要求的商业系统中开始研究&#xff0c;可靠性和其他质量属性一样是衡量软件架构的重要指标。实践证明&#xff0c;保障软件可靠性最有效、最经济、最重要的手段是在软…