亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

oracle分析函數(二)

2024-08-29 13:49:44
字體:
來源:轉載
供稿:網友
2. rank函數的介紹

介紹完rollup和cube函數的使用,下面我們來看看rank系列函數的使用方法.

問題2.我想查出這幾個月份中各個地區的總話費的排名.


  Quote:
為了將rank,dense_rank,row_number函數的差別顯示出來,我們對已有的基礎數據做一些修改,將5763的數據改成與5761的數據相同.
  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函數來計算各個地區的話費排名.
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

我們可以看到紅色標注的地方出現了,跳位,排名3沒有出現
下面我們再看看dense_rank查詢的結果.


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  這是這里出現了第三名
5762             52039.62          4

Elapsed: 00:00:00.00


在這個例子中,出現了一個第三名,這就是rank和dense_rank的差別,
rank假如出現兩個相同的數據,那么后面的數據就會直接跳過這個排名,而dense_rank則不會,
差別更大的是,row_number哪怕是兩個數據完全相同,排名也會不一樣,這個特性在我們想找出對應沒個條件的唯一記錄的時候又很大用處


  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函數中,我們發現,哪怕sum(local_fare)完全相同,我們還是得到了不一樣排名,我們可以利用這個特性剔除數據庫中的重復記錄.

這個帖子中的幾個例子是為了說明這三個函數的基本用法的. 下個帖子我們將具體介紹他們的一些用法.




2. rank函數的介紹

a. 取出數據庫中最后入網的n個用戶
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.根據object_name刪除數據庫中的重復記錄
create table t as select obj#,name from sys.obj$;
再insert into t1 select * from t1 數次.
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. 取出各地區的話費收入在各個月份排名.
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函數介紹

取出每個月的上個月和下個月的話費總額
  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               0
5764      200405          12487.791              0               0       13295.187       13444.093
5764      200406          13295.187              0       12487.791       13444.093       13929.694
5764      200407          13444.093      12487.791       13295.187       13929.694               0

5764      200408          13929.694      13295.187       13444.093               0               0
5765      200405          25057.736              0               0        26058.46       26301.881
5765      200406           26058.46              0       25057.736       26301.881       27130.638
5765      200407          26301.881      25057.736        26058.46       27130.638               0
5765      200408          27130.638       26058.46       26301.881               0               0
20 rows selected.

利用lag和lead函數,我們可以在同一行中顯示前n行的數據,也可以顯示后n行的數據.


4. sum,avg,max,min移動計算數據介紹

計算出各個連續3個月的通話費用的平均數
  1  select area_code,bill_month, local_fare,
  2     sum(local_fare)
  3             over (  partition by area_code
  4                     order by to_number(bill_month)
  5                     range between 1 preceding and 1 following ) "3month_sum",
  6     avg(local_fare)
  7             over (  partition by area_code
  8                     order by to_number(bill_month)

  9                     range between 1 preceding and 1 following ) "3month_avg",
10     max(local_fare)
11             over (  partition by area_code
12                     order by to_number(bill_month)
13                     range between 1 preceding and 1 following ) "3month_max",
14     min(local_fare)
15             over (  partition by area_code
16                     order by to_number(bill_month)
17                     range between 1 preceding and 1 following ) "3month_min"
18  from (
19     select area_code,bill_month,sum(local_fare) local_fare
20     from t
21     group by area_code,bill_month
22* )
SQL> /

AREA_CODE BILL_MONTH       LOCAL_FARE 3month_sum 3month_avg 3month_max 3month_min
--------- ---------- ---------------- ---------- ---------- ---------- ----------
5761      200405            13060.433  26379.363 13189.6815   13318.93  13060.433
5761      200406            13318.930  40089.628 13363.2093  13710.265  13060.433
5761      200407            13710.265  41164.976 13721.6587  14135.781   13318.93
40089.628 = 13060.433 + 13318.930 + 13710.265
13363.2093 = (13060.433 + 13318.930 + 13710.265) / 3
13710.265 = max(13060.433 + 13318.930 + 13710.265)
13060.433 = min(13060.433 + 13318.930 + 13710.265)
5761      200408            14135.781  27846.046  13923.023  14135.781  13710.265
5762      200405            12643.791  25438.851 12719.4255   12795.06  12643.791
5762      200406            12795.060  38663.148  12887.716  13224.297  12643.791

5762      200407            13224.297  39395.825 13131.9417  13376.468   12795.06
5762      200408            13376.468  26600.765 13300.3825  13376.468  13224.297
5763      200405            13060.433  26379.363 13189.6815   13318.93  13060.433
5763      200406            13318.930  40089.628 13363.2093  13710.265  13060.433
5763      200407            13710.265  41164.976 13721.6587  14135.781   13318.93
5763      200408            14135.781  27846.046  13923.023  14135.781  13710.265
5764      200405            12487.791  25782.978  12891.489  13295.187  12487.791
5764      200406            13295.187  39227.071 13075.6903  13444.093  12487.791
5764      200407            13444.093  40668.974 13556.3247  13929.694  13295.187
5764      200408            13929.694  27373.787 13686.8935  13929.694  13444.093
5765      200405            25057.736  51116.196  25558.098   26058.46  25057.736
5765      200406            26058.460  77418.077 25806.0257  26301.881  25057.736
5765      200407            26301.881  79490.979  26496.993  27130.638   26058.46
5765      200408            27130.638  53432.519 26716.2595  27130.638  26301.881

20 rows selected.

5. ratio_to_report函數的介紹





  Quote:
  1  select bill_month,area_code,sum(local_fare) local_fare,
  2     ratio_to_report(sum(local_fare)) over
  3       ( partition by bill_month ) area_pct
  4  from t
  5* group by bill_month,area_code
SQL> break on bill_month skip 1
SQL> compute sum of local_fare on bill_month
SQL> compute sum of area_pct on bill_month
SQL> /

BILL_MONTH AREA_CODE       LOCAL_FARE   AREA_PCT
---------- --------- ---------------- ----------
200405     5761             13060.433 .171149279
           5762             12643.791 .165689431
           5763             13060.433 .171149279
           5764             12487.791 .163645143
           5765             25057.736 .328366866
**********           ---------------- ----------
sum                         76310.184          1

200406     5761             13318.930 .169050772
           5762             12795.060 .162401542
           5763             13318.930 .169050772
           5764             13295.187 .168749414
           5765             26058.460 .330747499
**********           ---------------- ----------
sum                         78786.567          1


200407     5761             13710.265 .170545197
           5762             13224.297 .164500127
           5763             13710.265 .170545197
           5764             13444.093 .167234221
           5765             26301.881 .327175257
**********           ---------------- ----------
sum                         80390.801          1

200408     5761             14135.781 .170911147
           5762             13376.468 .161730539
           5763             14135.781 .170911147
           5764             13929.694 .168419416
           5765             27130.638 .328027751
**********           ---------------- ----------
sum                         82708.362          1


20 rows selected.



6 first,last函數使用介紹




  Quote:
取出每月通話費最高和最低的兩個用戶.
1  select bill_month,area_code,sum(local_fare) local_fare,
  2     first_value(area_code)
  3             over (order by sum(local_fare) desc
  4                     rows unbounded preceding) firstval,
  5     first_value(area_code)
  6             over (order by sum(local_fare) asc

  7                     rows unbounded preceding) lastval
  8  from t
  9  group by bill_month,area_code
10* order by bill_month
SQL> /

BILL_MONTH AREA_CODE       LOCAL_FARE FIRSTVAL        LASTVAL
---------- --------- ---------------- --------------- ---------------
200405     5764             12487.791 5765            5764
200405     5762             12643.791 5765            5764
200405     5761             13060.433 5765            5764
200405     5765             25057.736 5765            5764
200405     5763             13060.433 5765            5764
200406     5762             12795.060 5765            5764
200406     5763             13318.930 5765            5764
200406     5764             13295.187 5765            5764
200406     5765             26058.460 5765            5764
200406     5761             13318.930 5765            5764
200407     5762             13224.297 5765            5764
200407     5765             26301.881 5765            5764

200407     5761             13710.265 5765            5764
200407     5763             13710.265 5765            5764
200407     5764             13444.093 5765            5764
200408     5762             13376.468 5765            5764
200408     5764             13929.694 5765            5764
200408     5761             14135.781 5765            5764
200408     5765             27130.638 5765            5764
200408     5763             14135.781 5765            5764

20 rows selected.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女av| 亚洲国产精品热久久| 97精品一区二区三区| 精品久久久久久久久久国产| 欧美日韩亚洲国产一区| 欧美成人精品不卡视频在线观看| 一二美女精品欧洲| 欧美高清理论片| 欧美激情综合色综合啪啪五月| 欧美精品久久久久a| 欧美乱大交做爰xxxⅹ性3| 亚洲网站视频福利| 亚洲成人网在线观看| 欧洲精品毛片网站| 国产美女精彩久久| 久久天天躁夜夜躁狠狠躁2022| 国内精品美女av在线播放| 国产成人午夜视频网址| 精品久久久久久久久中文字幕| 91香蕉国产在线观看| 欧美精品第一页在线播放| 久久精品99久久久香蕉| 亚洲午夜女主播在线直播| 久久成人这里只有精品| 亚洲iv一区二区三区| 久久在线精品视频| 午夜精品一区二区三区视频免费看| 国色天香2019中文字幕在线观看| 久久免费少妇高潮久久精品99| 性欧美办公室18xxxxhd| 成人午夜在线观看| 久久久999国产精品| 91手机视频在线观看| 日韩在线播放视频| 日韩欧美综合在线视频| 亚洲一区二区三区在线视频| 欧亚精品在线观看| 啊v视频在线一区二区三区| 精品视频在线播放色网色视频| 国产精品视频1区| 久久精品国产99国产精品澳门| 欧美精品第一页在线播放| 亚洲成人免费网站| 韩国精品美女www爽爽爽视频| 97在线精品国自产拍中文| 91日本在线视频| 国产91久久婷婷一区二区| 国产精品色午夜在线观看| 亚洲成人av片在线观看| www.日韩免费| 国产精品三级美女白浆呻吟| 久久久av网站| 国产日本欧美一区| 热久久99这里有精品| 日韩av第一页| 欧美一区视频在线| 欧美夫妻性生活视频| 欧美成人亚洲成人日韩成人| 久久99精品久久久久久琪琪| 国产午夜精品视频| 最好看的2019年中文视频| 51ⅴ精品国产91久久久久久| 久久中国妇女中文字幕| 欧美午夜精品久久久久久人妖| 精品香蕉一区二区三区| 国产啪精品视频网站| 亚洲美女自拍视频| 91精品在线影院| 中文字幕精品一区二区精品| 欧美黑人国产人伦爽爽爽| 九九久久久久久久久激情| 亚洲精品日韩丝袜精品| 日韩免费av在线| 国产日韩中文字幕在线| 日韩亚洲精品视频| 成人在线免费观看视视频| 欧美国产精品va在线观看| 国产成人精品一区二区三区| 九九热精品在线| 欧美视频在线观看 亚洲欧| 狠狠躁夜夜躁久久躁别揉| 原创国产精品91| 欧美裸体xxxx极品少妇| 日韩欧美中文字幕在线播放| 中文字幕视频一区二区在线有码| 青青青国产精品一区二区| 亚洲精品国产拍免费91在线| 中文字幕日韩免费视频| 久久久久久久91| 亚洲成av人影院在线观看| 久久躁狠狠躁夜夜爽| 91精品久久久久久| 亚洲精品之草原avav久久| 欧美多人乱p欧美4p久久| 精品国产精品三级精品av网址| 国产精品久久激情| 亚洲全黄一级网站| 91精品在线播放| 久久激情五月丁香伊人| 在线性视频日韩欧美| 欧美激情精品久久久久久久变态| 欧美日韩免费在线| 狠狠色狠色综合曰曰| 亚洲桃花岛网站| 国产精品视频久久久久| 日韩av在线不卡| 日韩最新中文字幕电影免费看| 国外成人性视频| 91久久国产婷婷一区二区| 亚洲美女av网站| 亚洲精品永久免费精品| www.亚洲一区| 国产97在线播放| 中文国产成人精品| 日韩黄在线观看| 国产精品久久av| 亚洲自拍偷拍第一页| 一区二区欧美在线| 少妇高潮久久77777| 欧美大片大片在线播放| 日韩精品中文字| 97国产精品久久| 成人黄色片在线| 91爱爱小视频k| 97在线观看免费| 国产亚洲xxx| 日韩大陆欧美高清视频区| 精品国产一区二区在线| 亚洲一区二区三区在线视频| 国产成人精品国内自产拍免费看| 欧美日韩国产精品| 欧美疯狂xxxx大交乱88av| 欧美黄色性视频| 欧美精品中文字幕一区| 98精品国产高清在线xxxx天堂| 欧美电影免费观看高清| 国产成人综合亚洲| 色妞欧美日韩在线| 高清欧美性猛交xxxx黑人猛交| 2019亚洲日韩新视频| 在线中文字幕日韩| 亚洲国产精品人人爽夜夜爽| 精品日韩中文字幕| 国产视频亚洲精品| 欧美日韩国产麻豆| 色噜噜国产精品视频一区二区| 在线播放国产一区二区三区| 亚洲国产精品va在线观看黑人| 91极品女神在线| 国产精品久久久久久久av电影| 成人妇女免费播放久久久| 亚洲精品久久7777777| 亚洲天堂第二页| 国产精品福利久久久| 国产精品网站视频| 久久亚洲精品小早川怜子66| 亚洲欧美日韩天堂| 97久久国产精品| 久久视频在线免费观看| 亚洲激情国产精品| 久久久电影免费观看完整版| 精品中文字幕在线观看| 亚洲激情电影中文字幕| 亚洲国产精品久久久久|