分析函式之keep函式

2022-09-06 22:09:16 字數 940 閱讀 7305

一、keep函式介紹

--keep是oracle下的另乙個分析函式,他的用法不同於通過over關鍵字指定的分析函式,可以用於這樣一種場合下:

--取同乙個分組下以某個字段排序後,對指定欄位取最小或最大的那個值。

--從這個前提出發,我們可以看到其實這個目標通過一般的row_number分析函式也可以實現,即指定rn=1。但是,

--該函式無法實現同時獲取最大和最小值。或者說用first_value和last_value,結合row_number實現,

--但是該種方式需要多次使用分析函式,而且還需要套一層sql。於是出現了keep。

--語法:

--min | max(column1) keep (dense_rank first | last order by column2) over (partion by column3);

--最前是聚合函式,可以是min、max、**g、sum。。。

--column1為要計算的列;

--dense_rank first,dense_rank last為keep 函式的保留屬性,表示分組、排序結果集中第乙個、最後乙個;

--解釋:返回按照column3分組後,按照column2排序的結果集中第乙個或最後乙個最小值或最大值column1。

select

deptno,

max(sal) keep(dense_rank first order

bysal) first_max,

max(sal) keep(dense_rank last order

bysal) last_max

from

emp

group

bydeptno;

--我們來分析一下,sql裡面的group by 是作用於聚會函式的,可以這麼理解一下。還有,這裡我們頭腦裡應該有這麼乙個概念,排序即分組。

分析函式之rollup cube函式

rollup 函式 cube 函式 通常與group by 子句一起使用,根據維度在分組後進行聚合操作 應用場景 為每個分組返回乙個小計,同時為所有分組返回總計 select ename,deptno,sum sal from emp group byrollup deptno,ename roll...

linux C函式之strdup函式分析

1.函式原型 include char strdup const char s 2.功能 strdup 函式主要是拷貝字串s的乙個副本,由函式返回值返回,這個副本有自己的記憶體空間,和s沒有關聯。strdup函式複製乙個字串,使用完後,要使用delete函式刪除在函式中動態申請的記憶體,strdup...

Oracle 之常用分析函式

oracle自帶功能強大的分析函式,剛接觸了好幾個,才知道原來寫的一些sql完全可以簡化,相見恨晚吶!下面將介紹幾個排名的函式。row number rank dense rank row number可以通過over 根據某欄位排序完之後進行組內 如果有partition by 排序。rank 是...