分析函式學習 二 排名函式分析

2021-06-05 18:53:48 字數 1520 閱讀 1323

一: 排名分析函式有 row_number, dense_rank, rank, first, last, ntile 等. 其中row_number, dense_rank, rank , first, last 都需要 order by

a。row_number, dense_rank, rank, 三者區別如下

row_number    排名不重複連續

dense_rank     排名重複連續

rank                   排名重複不連續

案例說明:

select t.ename , t.deptno, t.sal,

row_number()over(partition by t.deptno order by t.sal) as rw,

rank()over(partition by t.deptno order by t.sal) as rk,

dense_rank() over(partition by t.deptno order by t.sal) as d_rk

from test_emp t        

結果:

b .  last /first 排名查詢

假設有這樣的需求; 檢索出每個部門的工資最多, 最少的姓名. 一般情況做法:先檢索出工資最多的 在檢索出工資最少的  最後合併

但是利用last /first 能非常快捷的得到答案。

select t.deptno,

min(t.ename) keep(dense_rank last order by t.sal) as max_sal_name,

min(t.ename) keep(dense_rank first order by t.sal) as min_sal_name

from emp t

group by t.deptno

結果:

其中:min 確定結果的唯一性 也可以用max.

keep 說明oracle只保留符合keep條件的記錄.

dense_rank 告訴oracle排列的策略,first/last則告訴最終篩選的條件.

c.  ntile 層次查詢

有時我們可能會接到類似這樣的需求: 查詢出每個部門工資排名前1/5的員工信

select *

from (

select t.deptno,        t.ename,              t.sal,

ntile(5) over(partition by t.deptno order by t.sal desc) as rn

from emp t)

where rn=1

結果:

OSTaskCreate()函式分析

int8u ostaskcreate void task void pd void p arg,os stk ptos,int8u prio 函式返回乙個8位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...

getopt函式分析

函式getopt主要用於拆分命令列引數,用這個函式就不自己寫命令列引數解析程式了,以下 摘自tcpdump原始碼,對這個函式比較感興趣,故對此進行分析注釋,因水平實在不敢恭維,不足之處希望能一起 函式getopt 有三個引數,nargc,nargv就是命令列傳過來的argc和argv字串ostr,它...

uCOS OSTaskCreate()函式分析

int8u ostaskcreate void task void pd void p arg,os stk ptos,int8u prio 函式返回乙個8位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...