一: 排名分析函式有 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位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...