oracle分析函数 子查询,Oracle之数据操作__子查询_分析函数

论坛 期权论坛 脚本     
已经匿名di用户   2022-3-21 23:59   2338   0

一. 分析函数主要语法

传统SQL的问题:

87399a30356948cc962b6bf32e23a607.png

基本语法:

2479c451af20096b5a5a5f9caffe3931.png

组合顺序:

60eb0faa639e9f70e8b2df2848aa5880.png

1. 使用PARTITION子句

SELECT did,ename,sal,

SUM(sal) OVER (PARTITION BY did) sum

FROM emp;

9c9d9695a813e087a3bca168bbedbcd5.png

2. 不适用PARITION进行分区,直接利用OVER子句操作

SELECT did,ename,sal,

SUM(sal) OVER () sum

FROM emp;

b8dac59bf40d44518b565329cc04f0b8.png

3. 通过PARTITION设置多个分区字段

SELECT did,ename,sal,job,

SUM(sal) OVER (PARTITION BY did,job) sum

FROM emp;

2d136078ac7b26db4cdbe4b33be184e2.png

4. 观察ORDER BY 子句

SELECT did,ename,sal,

RANK() OVER (PARTITION BY did ORDER BY sal DESC) rk

FROM emp

7475ef96e3443f7a008ec67ca70e4787.png

# ORDER BY 子句的作用主要就是进行排序,但是现在实现的是分区内数据的排序,而这个会直接影响到最终得到查询结果

5. 直接利用 ORDER BY 排序所有数据

SELECT did,ename,sal,hiredate,

SUM(sal) OVER (ORDER BY ename DESC) sum

FROM emp;

9dfc28a85f78f5b8cb9dfb673fd6283c.png

6, ORDER BY 子句选项:

5496da7eb44fffe9f152bbb6c80037e7.png

6.1 null在前

SELECT did,ename,sal,comm,

RANK() OVER (ORDER BY comm DESC) rk,

SUM(sal) OVER (ORDER BY comm DESC) sum

FROM emp;

f75f37df7249783cae9fcd03c90e3da3.png

6.2 null在后

SELECT did,ename,sal,comm,

RANK() OVER (ORDER BY comm DESC NULLS LAST) rk,

SUM(sal) OVER (ORDER BY comm DESC NULLS LAST) sum

FROM emp;

89646ef57d7e27487277ec344bdf76e2.png

二. 分窗操作的使用

WINDOWING子句:

c0c1e3744acacbc1778fcf2c8e29bb43.png

三. 了解基本分析函数

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP