oracle开窗函数

Posted java叶新东老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle开窗函数相关的知识,希望对你有一定的参考价值。

开窗函数为 : over()

说明

oracle开窗函数和group by还是有不一样的地方,

  • group by 是分组后就直接去重了,
  • 开窗函数分组后不去重,并且还可以进行排序

使用方法

 over(PARTITION BY age ) 表示对结果集按照age进行分区

实战

新建一个user_test表,建表语句为:

create table user_test(
  id number(20) not null,
  name varchar2(50),
  age number(3)
)

表数据如下,对没错,一共就四条数据,数据量少的情况下理解更容易,不然只有写文章的人能看懂,看文章的人却一脸懵;

当我们使用group by 语句时,得出来的结果是这样的,这是group by 的特性,分组后会自动去重

但是当我们使用开窗函数时,分组的同时,不会去重,并且还给你排好序

通过以上2个例子可以更好的理解开窗函数和group by的区别;但是开窗函数远不止这些用法
接下来我们看看rank()的用法
首先增加2条记录,最后的5和6是新加的

rank() 编号的时候排序字段会参与,数据相同的字段的编号也相同,总编号不变 1 2 2 4 5

dense_rank() 编号的时候排序字段会参与,数据相同的字段的编号也相同,总编号改变 1 2 2 3 4

其他用法

当我将列和统计count(*)一起查询时会报错,

但是当我在count(*)后面加上开窗函数之后就可以运行了

以上是关于oracle开窗函数的主要内容,如果未能解决你的问题,请参考以下文章

[转]Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数

oracle分析函数技术详解(配上开窗函数over())

Oracle 的开窗函数 rank,dense_rank,row_number

Oracl Over函数

SQL开窗函数

MySQL 开窗函数