a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > Oracle > 正文

深入探討:oracle中row_number() over()分析函數用法

2024-08-29 13:55:07
字體:
來源:轉載
供稿:網友
row_number()over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的)。
與rownum的區別在于:使用rownum進行排序的時候是先對結果集加入偽劣rownum然后再進行排序,而此函數在包含排序從句后是先排序再計算行號碼。
row_number()和rownum差不多,功能更強一點(可以在各個分組內從1開始排序)。
rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內)
dense_rank()也是連續排序,有兩個第二名時仍然跟著第三名。相比之下row_number是沒有重復值的。
oracle 分析函數 row_number(),返回一個整數值(>=1);
語法格式:
1.row_number() over (order by col_1[,col_2 ...])
作用:按照col_1[,col_2 ...]排序,返回排序后的結果集,
此用法有點像rownum,為每一行返回一個不相同的值:

復制代碼 代碼如下:


select rownum,ename,job,
row_number() over (order by rownum) row_number
from emp;
ROWNUM ENAMEJOBROW_NUMBER
---------- ---------- --------- ----------
1 SMITHCLERK1
2 ALLENSALESMAN2
3 WARDSALESMAN3
4 JONESMANAGER4
5 MARTINSALESMAN5
6 BLAKEMANAGER6
7 CLARKMANAGER7
8 SCOTTANALYST8
9 KINGPRESIDENT9
10 TURNERSALESMAN10
11 ADAMSCLERK11
12 JAMESCLERK12
13 FORDANALYST13
14 MILLERCLERK14


如果沒有partition by子句, 結果集將是按照order by 指定的列進行排序;

復制代碼 代碼如下:


with row_number_test as(
select 22 a,'twenty two' b from dual union all
select 1,'one' from dual union all
select 13,'thirteen' from dual union all
select 5,'five' from dual union all
select 4,'four' from dual)
select a,b,
row_number() over (order by b)
from row_number_test
order by a;


正如我們所期待的,row_number()返回按照b列排序的結果,
然后再按照a進行排序,才得到下面的結果:

復制代碼 代碼如下:


A BROW_NUMBER()OVER(ORDERBYB)
-- ---------- --------------------------
1 one3
4 four2
5 five1
13 thirteen4
22 twenty two5


2.row_number() over (partition by col_n[,col_m ...] order by col_1[,col_2 ...])
作用:先按照col_n[,col_m ...進行分組,
再在每個分組中按照col_1[,col_2 ...]進行排序(升序),
最后返回排好序后的結果集:

復制代碼 代碼如下:


with row_number_test as(
select 22 a,'twenty two' b,'*' c from dual union all
select 1,'one','+' from dual union all
select 13,'thirteen','*' from dual union all
select 5,'five','+' from dual union all
select 4,'four','+' from dual)
select a,b,
row_number() over (partition by c order by b) row_number
from row_number_test
order by a;


這個例子中,我們先按照c列分組,分為2組('*'組,'+'組),
再按照每個小組的b列進行排序(按字符串首字母的ascii碼排),
最后按照a列排序,得到下面的結果集:

復制代碼 代碼如下:


A BROW_NUMBER
-- ---------- ----------
1 one3
4 four2
5 five1
13 thirteen1
22 twenty two


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人看的免费视频 | 精品久久久久久久久久久院品网 | 日韩免费精品视频 | 日韩在线一区二区三区 | 黄色网址免费在线观看 | 国产精品久久久久桃色tv | 韩国精品一区二区 | xx视频在线观看 | 国产一区二精品区在线 | 超碰在线观看免费 | 欧美片网站 | 国产精品视频久久久久久 | theporn国产在线精品 | 中文字幕一区二区三区在线视频 | 日日干夜夜骑 | 精品国产乱码简爱久久久久久 | 青青草一区二区 | 黄色一级大片在线免费看产 | av在线免费播放 | 欧美日韩精品免费观看视频 | 91久久精品国产91久久性色tv | 国产精品视频综合 | 欧美性v | 国产成人精品免费 | 91av久久 | 欧美xxxx网站 | 精品一区二区国产 | 艳妇荡乳豪妇荡淫 | 国产一区二区三区免费观看 | 成人av网站在线观看 | 97色免费视频 | www.狠狠干 | 婷婷天堂网 | 99久久综合狠狠综合久久 | 国产视频第一页 | 日韩综合网| 国产精品成人免费 | 日韩午夜视频在线观看 | 少妇一级淫片免费放 | 日本三级网 | 看免费av|