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

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

Oracle學(xué)習(xí)之Oracle分析函數(shù)(二)

2024-08-29 13:40:20
字體:
供稿:網(wǎng)友

  1. rank函數(shù)的介紹
  
  介紹完rollup和cube函數(shù)的使用,下面我們來看看rank系列函數(shù)的使用方法.
  
  問題2.我想查出這幾個(gè)月份中各個(gè)地區(qū)的總話費(fèi)的排名.
  
  Quote:
  
  為了將rank,dense_rank,row_number函數(shù)的差別顯示出來,我們對(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ù)來計(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沒有出現(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ì)直接跳過這個(gè)排名,而dense_rank則不會(huì),差別更大的是,row_number哪怕是兩個(gè)數(shù)據(jù)完全相同,排名也會(huì)不一樣,這個(gè)特性在我們想找出對(duì)應(yīng)沒個(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ù)庫中的重復(fù)記錄.
  
  這個(gè)帖子中的幾個(gè)例子是為了說明這三個(gè)函數(shù)的基本用法的. 下個(gè)帖子我們將具體介紹他們的一些用法.
  
  2. 三個(gè)函數(shù)的基本用法
  
  a. 取出數(shù)據(jù)庫中最后入網(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ù)庫中的重復(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é)院)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西乡县| 田林县| 祁阳县| 沁源县| 改则县| 昌宁县| 堆龙德庆县| 徐水县| 亳州市| 康定县| 龙岩市| 肥西县| 肃南| 陇川县| 桐城市| 博湖县| 临高县| 承德县| 洛宁县| 武定县| 略阳县| 巍山| 威海市| 茂名市| 富顺县| 汕尾市| 繁峙县| 德钦县| 渑池县| 苏州市| 四子王旗| 准格尔旗| 巴彦县| 恩平市| 高清| 汾阳市| 勃利县| 辽阳县| 邯郸县| 汾阳市| 城口县|