oracle开窗函数

发布时间:2022-03-01 10:48:35 作者:yexindonglai@163.com 阅读(632)

开窗函数为 : over()

说明

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

  • group by 是分组后就直接去重了,
  • 开窗函数分组后不去重,并且还可以进行排序
    在这里插入图片描述

使用方法

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

实战

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

  1. create table user_test(
  2. id number(20) not null,
  3. name varchar2(50),
  4. age number(3)
  5. )

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

当我们使用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