国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

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

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

復(fù)制代碼 代碼如下:


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


如果沒(méi)有partition by子句, 結(jié)果集將是按照order by 指定的列進(jìn)行排序;

復(fù)制代碼 代碼如下:


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列排序的結(jié)果,
然后再按照a進(jìn)行排序,才得到下面的結(jié)果:

復(fù)制代碼 代碼如下:


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 ...進(jìn)行分組,
再在每個(gè)分組中按照col_1[,col_2 ...]進(jìn)行排序(升序),
最后返回排好序后的結(jié)果集:

復(fù)制代碼 代碼如下:


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;


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

復(fù)制代碼 代碼如下:


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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丰镇市| 靖江市| 延庆县| 苏尼特右旗| 尼勒克县| 新河县| 荣成市| 健康| 疏勒县| 宜宾市| 青田县| 紫云| 霍邱县| 三穗县| 泰宁县| 曲靖市| 余干县| 芜湖市| 堆龙德庆县| 清苑县| 通许县| 辉南县| 台南县| 大城县| 庐江县| 张家口市| 龙海市| 武鸣县| 城固县| 军事| 论坛| 石景山区| 巨鹿县| 高台县| 彭山县| 天祝| 察哈| 九台市| 新巴尔虎右旗| 林周县| 康马县|