返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Oracle数据库分析函数用法
  • 406
分享到

Oracle数据库分析函数用法

2024-04-02 19:04:59 406人浏览 八月长安
摘要

目录1、什么是窗口函数?2、窗口函数——开窗3、一些分析函数的使用方法4、OVER()参数——分组函数5、OVER()参数——排序函数1、什么是窗口函数? 窗口函数也属于分析函数。o

1、什么是窗口函数?

窗口函数也属于分析函数。oracle从8.1.6开始提供窗口函数,窗口函数用于计算基于组的某种聚合值,
窗口函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。
与聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行


基本语法: ‹分析函数› over (partition by ‹用于分组的列名› order by ‹用于排序的列名›)。
语法中的‹分析函数›主要由序列函数(rank、dense_rank和row_number等组成)
与聚合函数(sum、avg、count、max和min等)作为窗口函数组成。

从窗口函数组成上看,它是group by 和 order by的功能组合,group by分组汇总后改变了表的行数,一行只有一个类别,而partiition by则不会减少原表中的行数。
恰如窗口函数的组成,它同时具有分组和排序的功能,且不减少原表的行数。
OVER 关键字表示把函数当成窗口函数而不是聚合函数。sql 标准允许将所有聚合函数用做窗口函数,使用 OVER 关键字来区分这两种用法。

2、窗口函数——开窗

OVER 关键字后的括号中经常添加选项用以改变进行聚合运算的窗口范围。如果 OVER 关键字后的括号中的选项为空,则窗口函数会对结果集中的所有行进行聚合运算。


分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置)

为什么叫开窗呢?

因为在over()括号中的,partition() 函数可以将查询到的数据进行单独开一个窗口处理。譬如,查询每个班级的学生的排名情况,查询每个国家的历年人口等,诸如此类,都是在查询到的每一个班级、每一个国家中都开一个窗口,单独去执行命令。

rows和range分别表示选择后几行、选择数据范围
理解 rows between 含义,也叫做window子句:

preceding:往前following:往后current row:当前行unbounded:无边界,unbounded precending 表示从最前面的起点开始, unbounded following:表示到最后面的终点注:不加 partition by 的话则把整个数据集当作一个分区,不加 order by的话会对某些函数统计结果产生影响,如sum()

3、一些分析函数的使用方法

1.聚合函数

聚合函数 定义
sum() 求和
max() 求最大值
min() 求最小值
avg() 求平均值
count() 统计数

2.序列函数

序列函数 定义
row_number() 按照值排序时产生一个自增编号,值相等时不会重复,不会产生空位
rank() 按照值排序时产生一个自增编号,值相等时会重复,会产生空位
dense_rank() 按照值排序时产生一个自增编号,值相等时会重复,不会产生空位

row_number()


select * ,row_number()over(oder by 成绩 desc) as 排名 from 班级表

查询结果:


+------------+--------+------+------+------+
| 姓名       | 性别   | 班级  | 成绩 | 排名 |
+------------+--------+------+------+------+
| 张三       | 男      | 1    | 100  | 1    |
| 李四       | 女      | 3    | 100  | 2    |
| 张三       | 女      | 1    | 100  | 3    |
| 王五       | 女      | 2    | 99   | 4    |
| 赵四       | 男      | 2    | 90   | 5    |
| 孙六       | 男      | 2    | 90   | 6    |
| 喜羊羊     | 男      | 3    | 85   | 7    |
| 美羊羊     | 女      | 4    | 82   | 8    |
| 懒洋洋     | 女      | 1    | 80   | 9    |
| 慢羊羊     | 女      | 2    | 70   | 10   |
+------------+--------+------+------+------+

rank()


select * ,rank()over(oder by 成绩 desc) as 排名 from 班级表

查询结果:


+------------+--------+------+------+------+
| 姓名       | 性别   | 班级  | 成绩 | 排名 |
+------------+--------+------+------+------+
| 张三       | 男      | 1    | 100  | 1    |
| 李四       | 女      | 3    | 100  | 1    |
| 张三       | 女      | 1    | 100  | 1    |
| 王五       | 女      | 2    | 99   | 4    |
| 赵四       | 男      | 2    | 90   | 5    |
| 孙六       | 男      | 2    | 90   | 5    |
| 喜羊羊     | 男      | 3    | 85   | 7    |
| 美羊羊     | 女      | 4    | 82   | 8    |
| 懒洋洋     | 女      | 1    | 80   | 9    |
| 慢羊羊     | 女      | 2    | 70   | 10   |
+------------+--------+------+------+------+

dense_rank()


select * ,row_number()over(oder by 成绩 desc) as 排名 from 班级表

查询结果:


+------------+--------+------+------+------+
| 姓名       | 性别   | 班级  | 成绩 | 排名 |
+------------+--------+------+------+------+
| 张三       | 男      | 1    | 100  | 1   |
| 李四       | 女      | 3    | 100  | 1   |
| 张三       | 女      | 1    | 100  | 1   |
| 王五       | 女      | 2    | 99   | 2   |
| 赵四       | 男      | 2    | 90   | 3   |
| 孙六       | 男      | 2    | 90   | 3   |
| 喜羊羊     | 男      | 3    | 85   | 4   |
| 美羊羊     | 女      | 4    | 82   | 5   |
| 懒洋洋     | 女      | 1    | 80   | 6   |
| 慢羊羊     | 女      | 2    | 70   | 7   |
+------------+--------+------+------+------+

3.其他类

其他类 定义
percent_rank() 分组内当前行的rank值-1/分组内总行数-1
lag() 用于统计窗口内往上第n行值 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL
lead() 用于统计窗口内往下第n行值 第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL
ntile() 用于将分组数据按照顺序切分成n片,返回当前切片值
first_value() 取分组内排序后,截止到当前行,第一个值
last_value() 取分组内排序后,截止到当前行,最后一个值
cume_dist() 返回小于等于当前值的行数/分组内总行数

4、OVER()参数——分组函数

partition by 子句:


窗口函数的 over 关键字后括号中的可以使用 partition by 子句来定义行的分区来供进行聚合计算。
与 group by 子句不同,partition by 子句创建的分区是独立于结果集的,创建的分区只是供进行
聚合计算的,而且不同的窗口函数所创建的分区也不互相影响。

5、OVER()参数——排序函数

order by 子句:


窗口函数中可以在over关键字后的选项中使用order by 子句来指定排序规则,而且有的窗口函数还
要求必须指定排序规则。使用order by 子句可以对结果集按照指定的排序规则进行排序,并且在一个
指定的范围内进行聚合运算。
语法:ORDER BY字段名  RANGE|ROWS  BETWEEN边界规则1  AND  边界规则2

PARTITION BY子句和ORDER BY 可以共同使用,从而可以实现更加复杂的功能

到此这篇关于Oracle数据库分析函数用法的文章就介绍到这了,更多相关Oracle函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Oracle数据库分析函数用法

本文链接: https://lsjlt.com/news/160757.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle数据库分析函数用法
    目录1、什么是窗口函数?2、窗口函数——开窗3、一些分析函数的使用方法4、OVER()参数——分组函数5、OVER()参数——排序函数1、什么是窗口函数? 窗口函数也属于分析函数。O...
    99+
    2024-04-02
  • Oracle分析函数用法详解
    一、概述 OLAP的系统(即Online Aanalyse Process)一般用于系统决策使用。通常和数据仓库、数据分析、数据挖掘等概念联系在一起。这些系统的特点是数据量大,对实时...
    99+
    2024-04-02
  • oracle 函数之分析函数
    1.分析函数有4个 over row_number dense_rank rank 四个 不能单独使用2.select empno, sal ,deptno,sum(sal) over(o...
    99+
    2024-04-02
  • oracle常用分析函数与聚合函数的用法
    今天是2019年第一天,在此祝大家新年快乐,梦想还在路上,让我们继续加油! 应之前的计划,今天完成这篇记录,也借此记录自己的成长。 一、几个排名函数的语法和用法:  rank ( ) ...
    99+
    2024-04-02
  • Oracle分析函数
        聚合函数可以在分析模式或非分析模式下来进行运算。非分析模式下的聚合函数将结果集削减为较少的数据行。然而,在分析模式下,聚合函数并不减少输出结果行数。并且,聚合函数能够在...
    99+
    2024-04-02
  • Oracle数据库函数怎么用
    小编给大家分享一下Oracle数据库函数怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、什么是窗口函数?窗口函数也属于分析函数。Oracle从8.1.6开...
    99+
    2023-06-22
  • Python从Oracle数据库中获取数据——fetchall(),fetchone(),fetchmany()函数功能分析
    Python从Oracle数据库中获取数据——fetchall(),fetchone(),fetchmany()函数功能分析 一、fetchall(),fetchone(),fetchmany()简单...
    99+
    2023-10-03
    数据库 oracle python
  • Oracle数据库ODBC连接与数据库日志分析
    Oracle数据库ODBC连接是一种通过ODBC(Open Database Connectivity)驱动程序与Oracle数据库进行连接的方式。ODBC是一种标准的数据库访问接口,可以让应用程序与多种数据库系统进行通信。 要建立一个OD...
    99+
    2024-07-16
    oracle
  • Oracle数据库中有哪些分组函数
    这篇文章给大家介绍Oracle数据库中有哪些分组函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、group by的使用--根据DEPTNO和JOB进行分组。求相同DEPTNO,相...
    99+
    2024-04-02
  • Oracle分析函数Over()
    Over()分析函数   说明:聚合函数(如sum()、max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录。若想对于某组返回多行记录,则需要使用分析函数。 rank()/dense_rank over...
    99+
    2015-01-23
    Oracle分析函数Over()
  • PHP函数的数据分析函数
    PHP是一种高性能、开源的脚本语言,广泛应用于Web开发中。随着数据分析技术的发展,越来越多的数据需要被处理和分析。PHP提供了一些数据分析函数,可用于处理各种类型的数据。本文将介绍PHP数据分析函数的使用方法和示例。一、统计函数count...
    99+
    2023-05-18
    数据分析 函数 PHP函数
  • 常用oracle数据库函数总结
    wm_concat的基本语法    select proj_id,max(scale_valus) as scale_valus  &n...
    99+
    2024-04-02
  • DB2数据库切换为oracle数据库的示例分析
    小编给大家分享一下DB2数据库切换为oracle数据库的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!由于DB2数据库使...
    99+
    2024-04-02
  • oracle 数据库启动阶段分析
    Oracle Server主要由两部分组成:Instance 和Database 。Instance 是指一组后台进程/线程和一块共享内存区域,而 Database是指存储在磁盘上的一组物理文件。本文由数据...
    99+
    2024-04-02
  • ORACLE数据库 开窗函数
    开窗函数 2.1开窗函数的定义及语法 开窗函数(又名:分析函数,窗口函数,OLAP函数) 聚合函数:将数据按照一定的规则分组,统一分析各组的某项情况,每个分组返回一行结果 开窗函数:将数据按照一定的规则分组,统一分析各组的某项情况,每行数据...
    99+
    2023-09-02
    数据库 oracle python
  • Oracle数据库创建用户与数据库备份的示例分析
    这篇文章给大家分享的是有关Oracle数据库创建用户与数据库备份的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。创建用户以及授权代码:-- Create&nbs...
    99+
    2024-04-02
  • 数据库中datediff函数用法
    datediff() 函数计算两个日期之间的差异,语法为 datediff(interval, start_date, end_date)。参数 interval 指定差异类型 ("yy...
    99+
    2024-05-24
  • Oracle数据库高级应用:乘法运算实例分析
    Oracle数据库作为业界领先的关系型数据库管理系统,具有强大的功能和灵活的应用,能够支持各种复杂的数据处理需求。在数据库应用中,常常需要进行各种数值运算,如加减乘除等。本文将重点介绍...
    99+
    2024-03-02
    数据库 oracle 乘法 sql语句
  • Oracle分析函数入门
    Oracle分析函数入门...
    99+
    2020-12-22
    Oracle分析函数入门
  • oracle虚拟专用数据库的示例分析
    这篇文章给大家分享的是有关oracle虚拟专用数据库的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。所谓虚拟专用数据库(VPD)指的是,通过在数据库里进行配置,从而让不同...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作