日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数

發(fā)布時間:2023/12/15 数据库 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ORACLE數(shù)據(jù)庫(六)-----開窗函數(shù)

開窗函數(shù)又名分析函數(shù)、窗口函數(shù)、OLAP(數(shù)據(jù)分析)函數(shù)

聚合函數(shù):將數(shù)據(jù)按照一定的規(guī)則分組,統(tǒng)一分析各組的某項情況,每個分組返回一行結(jié)果

開窗函數(shù):將數(shù)據(jù)按照一定的規(guī)則分組,統(tǒng)一分析各組的某項情況,每行數(shù)據(jù)返回一行結(jié)果

一、開窗函數(shù)語法

分析函數(shù)名() over(分析子句)

over作為開窗函數(shù)的標志

二、分析子句

分組(PARTITION BY) 排序(ORDER BY) 窗口(ROWS)

三、窗口條件

PRECEDING:之前的

FOLLOWING:之后的

CURRENT:當前的

UNBOUNDING:不受限的

ROW: 行

ROWS BETWEEN N PRECEDING AND N FOLLOWING -- 前面N行---- 后面N行

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -- 第一行 - 當前行

ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING -- 當前行 - 最后一行

ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING -- 第一行 - 最后一行

三、分析函數(shù)

1 聚合類

SUM()、AVG() 、MAX()、 MIN()、 COUNT() 功能和聚合函數(shù)一樣

1 PARTITION BY 默認窗口的作用范圍是從每個組的第一行到最后一行

2 ORDER BY 默認窗口作用范圍是從第一條到當前條

3 ORDER BY 分組內(nèi)部排序,盡可能的按照順序排,但是結(jié)果不一定完全按照內(nèi)部排序結(jié)果

用SUM()舉例

SUM(列名) OVER([PARTITION] [ORDER] [ROWS])

--查詢每天的營業(yè)額及周每日累計營業(yè)額

SELECT DATA_DT,AMT,SUM(AMT)OVER(PARTITION BY WEEK ORDER BY DATA_DT ASC) FROM BUSINESS; -- 各組內(nèi)的第一條到當前條

注意點

1)分析函數(shù)名內(nèi)必須包含需要分析的內(nèi)容

2)分析子句沒有硬性要求 --- 出現(xiàn)ROWS時必須伴隨ORDER BY

3)采用默認窗口范圍時,下一個N相同值(用來排序的值相同)會被一并算入

2 排序類

ROW_NUMBER:對于排序值相同的行 排名不并列也不跳躍

RANK:對排序值相同的行 排名并列并且跳躍

DENSE_RANK:對排序值相同的行 并列不跳躍

用法

ROW_NUMBER()OVER([PARTITION BY ] ORDER BY)

查詢每天的營業(yè)額并在整月范圍內(nèi)升序排列

SELECT DATA_DT,AMT,ROW_NUMBER()OVER(ORDER BY AMT) RN FROM BUSINESS; -- 不并列 不跳躍

SELECT DATA_DT,AMT,RANK()OVER(ORDER BY AMT) RN FROM BUSINESS; -- 并列跳躍

SELECT DATA_DT,AMT,DENSE_RANK()OVER(ORDER BY AMT) RN FROM BUSINESS; -- 并列不跳躍

ROW_NUMBER 可以用來去除重復(fù)的行 完全重復(fù)和不完全重復(fù)(一般多條數(shù)據(jù)中除了日期不同其他均相同的行)

排序類開窗函數(shù)注意點:

1)分子函數(shù)名內(nèi)不能包含任何內(nèi)容

2)分析子句內(nèi)必須添加ORDER BY,且不能指定窗口

3 偏移類

LAG() : 向前偏移

LEAD(): 向后偏移

用法

用法(以LAG為例):LAG(COL_NAME,[OFFSET],[DEFVAL])OVER():向前偏移N行取數(shù)

COL_NAME:要分析的字段

OFFSET:偏移量 --默認偏移一行

DEFVAL:默認返回值 --默認返回空null 返回的類型要與分析字段的類型一樣

--查詢每天的營業(yè)額以及前一天的營業(yè)額

SELECT DATA_DT,AMT,

LAG(AMT,1,0)OVER(ORDER BY DATA_DT)

FROM BUSINESS;

偏移類開窗函數(shù)注意點:

1)分析函數(shù)名內(nèi)必須包含要分析的內(nèi)容,其他兩項參數(shù)可以默認

2)分析子句內(nèi)必須添加ORDER BY,且不能指定窗口

3)若不再有可供偏移的行,則返回默認值

4)偏移量不允許寫負數(shù)

5)默認返回值數(shù)據(jù)類型與分析的字段要保持一致

四、總結(jié)

1 窗口子句不能單獨出現(xiàn),必須要有排序子句出現(xiàn)的情況下才能指定窗口范圍

2 若出現(xiàn)排序子句(ORDER BY),同時未指定窗口范圍,默認的窗口范圍是第一行到當前行;若未出現(xiàn)排序子句,同時未指定窗口范圍,默認的窗口范圍是第一行到最后一行

總結(jié)

以上是生活随笔為你收集整理的oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。