日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

rank函数怎么用oracle,Oracle学习教程:rank函数的使用

發(fā)布時(shí)間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rank函数怎么用oracle,Oracle学习教程:rank函数的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. rank函數(shù)的介紹

介紹完rollup和cube函數(shù)的使用,下面我們來(lái)看看rank系列函數(shù)的使用方法。

問(wèn)題:我想查出這幾個(gè)月份中各個(gè)地區(qū)的總話費(fèi)的排名。

Quote:

為了將rank,dense_rank,row_number函數(shù)的差別顯示出來(lái),我們對(duì)已有的基礎(chǔ)數(shù)據(jù)做一些修改,將5763的數(shù)據(jù)改成與5761的數(shù)據(jù)相同。

1 update t t1 set local_fare = (

2  select local_fare from t t2

3   where t1.bill_month = t2.bill_month

4   and t1.net_type = t2.net_type

5   and t2.area_code = '5761'

6* ) where area_code = '5763'

07:19:18 SQL> /

8 rows updated.

Elapsed: 00:00:00.01

我們先使用rank函數(shù)來(lái)計(jì)算各個(gè)地區(qū)的話費(fèi)排名。

07:34:19 SQL> select area_code,sum(local_fare) local_fare,

07:35:25  2  rank() over (order by sum(local_fare) desc) fare_rank

07:35:44  3 from t

07:35:45  4 group by area_codee

07:35:50  5

07:35:52 SQL> select area_code,sum(local_fare) local_fare,

07:36:02  2  rank() over (order by sum(local_fare) desc) fare_rank

07:36:20  3 from t

07:36:21  4 group by area_code

07:36:25  5 /

AREA_CODE   LOCAL_FARE FARE_RANK

---------- -------------- ----------

5765      104548.72     1

5761       54225.41     2

5763       54225.41     2

5764       53156.77     4

5762       52039.62     5

Elapsed: 00:00:00.01

我們可以看到紅色標(biāo)注的地方出現(xiàn)了,跳位,排名3沒(méi)有出現(xiàn)下面我們?cè)倏纯磀ense_rank查詢的結(jié)果。

07:36:26 SQL> select area_code,sum(local_fare) local_fare,

07:39:16  2  dense_rank() over (order by sum(local_fare) desc ) fare_rank

07:39:39  3 from t

07:39:42  4 group by area_code

07:39:46  5 /

AREA_CODE   LOCAL_FARE FARE_RANK

---------- -------------- ----------

5765      104548.72     1

5761       54225.41     2

5763       54225.41     2

5764       53156.77     3 這是這里出現(xiàn)了第三名

5762       52039.62     4

Elapsed: 00:00:00.00

在這個(gè)例子中,出現(xiàn)了一個(gè)第三名,這就是rank和dense_rank的差別,rank假如出現(xiàn)兩個(gè)相同的數(shù)據(jù),那么后面的數(shù)據(jù)就會(huì)直接跳過(guò)這個(gè)排名,而dense_rank則不會(huì),差別更大的是,row_number哪怕是兩個(gè)數(shù)據(jù)完全相同,排名也會(huì)不一樣,這個(gè)特性在我們想找出對(duì)應(yīng)沒(méi)個(gè)條件的唯一記錄的時(shí)候又很大用處。

1 select area_code,sum(local_fare) local_fare,

2   row_number() over (order by sum(local_fare) desc ) fare_rank

3 from t

4* group by area_code

07:44:50 SQL> /

AREA_CODE   LOCAL_FARE FARE_RANK

---------- -------------- ----------

5765      104548.72     1

5761       54225.41     2

5763       54225.41     3

5764       53156.77     4

5762       52039.62     5

在row_nubmer函數(shù)中,我們發(fā)現(xiàn),哪怕sum(local_fare)完全相同,我們還是得到了不一樣排名,我們可以利用這個(gè)特性剔除數(shù)據(jù)庫(kù)中的重復(fù)記錄。

2. 三個(gè)函數(shù)的基本用法

a. 取出數(shù)據(jù)庫(kù)中最后入網(wǎng)的n個(gè)用戶

select user_id,tele_num,user_name,user_status,create_date

from (

select user_id,tele_num,user_name,user_status,create_date,

rank() over (order by create_date desc) add_rank

from user_info

)

where add_rank <

= :n;

b.根據(jù)object_name刪除數(shù)據(jù)庫(kù)中的重復(fù)記錄

create table t as select obj#,name from sys.obj$;

再insert into t1 select * from t1 數(shù)次.

delete from t1 where rowid in (

select row_id from (

select rowid row_id,row_number() over (partition by obj# order by rowid ) rn

) where rn <> 1

);

c. 取出各地區(qū)的話費(fèi)收入在各個(gè)月份排名.

SQL> select bill_month,area_code,sum(local_fare) local_fare,

2   rank() over (partition by bill_month order by sum(local_fare) desc) area_rank

3 from t

4 group by bill_month,area_code

5 /

BILL_MONTH   AREA_CODE      LOCAL_FARE AREA_RANK

--------------- --------------- -------------- ----------

200405     5765         25057.74     1

200405     5761         13060.43     2

200405     5763         13060.43     2

200405     5762         12643.79     4

200405     5764         12487.79     5

200406     5765         26058.46     1

200406     5761         13318.93     2

200406     5763         13318.93     2

200406     5764         13295.19     4

200406     5762         12795.06     5

200407     5765         26301.88     1

200407     5761         13710.27     2

200407     5763         13710.27     2

200407     5764         13444.09     4

200407     5762         13224.30     5

200408     5765         27130.64     1

200408     5761         14135.78     2

200408     5763         14135.78     2

200408     5764         13929.69     4

200408     5762         13376.47     5

20 rows selected.

SQL>

3. lag和lead函數(shù)介紹

取出每個(gè)月的上個(gè)月和下個(gè)月的話費(fèi)總額

1 select area_code,bill_month, local_fare cur_local_fare,

2   lag(local_fare,2,0) over (partition by area_code order by bill_month ) pre_local_fare,

3   lag(local_fare,1,0) over (partition by area_code order by bill_month ) last_local_fare,

4   lead(local_fare,1,0) over (partition by area_code order by bill_month ) next_local_fare,

5   lead(local_fare,2,0) over (partition by area_code order by bill_month ) post_local_fare

6 from (

7   select area_code,bill_month,sum(local_fare) local_fare

8   from t

9   group by area_code,bill_month

10* )

SQL> /

AREA_CODE BILL_MONTH CUR_LOCAL_FARE PRE_LOCAL_FARE LAST_LOCAL_FARE NEXT_LOCAL_FARE POST_LOCAL_FARE

--------- ---------- -------------- -------------- --------------- --------------- ---------------

5761 200405 13060.433 0 0 13318.93 13710.265

5761 200406 13318.93 0 13060.433 13710.265 14135.781

5761 200407 13710.265 13060.433 13318.93 14135.781 0

5761 200408 14135.781 13318.93 13710.265 0 0

5762 200405 12643.791 0 0 12795.06 13224.297

5762 200406 12795.06 0 12643.791 13224.297 13376.468

5762 200407 13224.297 12643.791 12795.06 13376.468 0

5762 200408 13376.468 12795.06 13224.297 0 0

5763 200405 13060.433 0 0 13318.93 13710.265

5763 200406 13318.93 0 13060.433 13710.265 14135.781

5763 200407 13710.265 13060.433 13318.93 14135.781 0

5763 200408 14135.781 13318.93 13710.265 0 right">

(出處:清風(fēng)軟件下載學(xué)院)

標(biāo)簽:

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,尊重他人勞動(dòng)成果

文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載

總結(jié)

以上是生活随笔為你收集整理的rank函数怎么用oracle,Oracle学习教程:rank函数的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。