日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Oracle中ROW_NUMBER()OVER()函數用法實例講解

瀏覽:309日期:2023-05-30 16:13:50
目錄
  • 1. 說明:
  • 2. 原理:
  • 3.語法:
  • 4.示例一:
  • 5. 示例二
  • 總結

Oracle中ROW_NUMBER() OVER()函數用法

1. 說明:

ROW_NUMBER() OVER() 函數的作用:分組排序

2. 原理:

row_number() over() 函數,over() 里的分組以及排序的執行晚于 where、group by、order by 的執行。

3.語法:

row_number() over( partition by 分組列 order by 排序列 desc )

4.示例一:

查詢表:SELECT * FROM SCOTT.EMP ;

使用Row_number() over() 函數,排序

SELECT EMPNO,ENAME,SAL,DEPTNO,Row_number() over( order by sal) rs FROMSCOTT.EMP ;

根據工資排序并添加序號

5. 示例二

1.建立測試學生數據表

create table Students (id int,name varchar2(100),classid int,score int); insert into Students values(1, "學生1", 1, 88);insert into Students values(2, "學生2", 3, 68);insert into Students values(3, "學生3", 1, 78);insert into Students values(4, "學生4", 2, 87);insert into Students values(5, "學生5", 1, 89);insert into Students values(6, "學生6", 2, 91);insert into Students values(7, "學生7", 3, 67);insert into Students values(8, "學生8", 1, 77);insert into Students values(9, "學生9", 3, 77);commit;

2.查學生數據根據班級分組,再根據分數排名。獲取到每個班級的學生分數排名

select id, name, classid, score, row_number() over(partition by classid order by score desc) rank from Students;

3. 獲取到每個班級分數排名第一的學生

select * from (select id, name, classid, score, row_number() over(partition by classid order by score desc) rank from Students) where rank = 1;

重點說明:

  1. parttion by 是 Oracle 中分析性函數的一部分,用于給結果集進行分區,它和聚合函數 group by
    不同的地方在于它只是將原始數據進行名次排列,能夠返回一個分組中的多條記錄(記錄數不變),而 group by
    是對原始數據進行聚合統計,一般只有一條反映統計值的結果(每組返回一條)。
  2. over() 必須有 ORDER BY 語句
  3. 分組內從 1開始排序
  4. over() 中的排序字段為空,會被排到第一

例如:

將學生1的分數設置為 null,再獲取到分組班級的學生分數排名

select id, name, classid, score, row_number() over(partition by classid order by score desc) rank from Students;

修改學生一在該班級的排序,分數最低排最后即可修正這個問題

select id, name, classid, score, row_number() over(partition by classid order by score desc nulls last) rank from Students;

2. 分析函數的例子二:

2.1 分析函數的形式:

分析函數帶有一個開窗函數over(),包含三個分析子句:分組(partition by),排序(order by), 窗口(rows),他們的使用形式如下:

over(partition by xxx order by yyy rows between zzz)– 例如在scott.emp表中:xxx為deptno, yyy為sal,– zzz為unbounded preceding and unbounded following

分析函數的例子:

顯示各部門員工的工資,并附帶顯示該部分的最高工資。

SQL如下:

SELECT DEPTNO, EMPNO, ENAME, SAL, LAST_VALUE(SAL) OVER (PARTITION BY DEPTNO ORDER BY SAL ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) MAX_SAL FROM EMP;

注: current row 表示當前行

unbounded preceding 表示第一行

unbounded following 表示最后一行

last_value(sal) 的結果與 order by sal 排序有關。如果排序為order by sal desc, 則最終的結果為分組排序后sal的最小值(分組排序后的最后一個值), 當deptno為10時,max_sal為1300

2.2 兩個order by 的執行機制

分析函數是在整個SQL查詢結束后(SQL語句中的order by 的執行比較特殊)再進行的操作,也就是說SQL語句中的order by也會影響分析函數的執行結果:

兩者一致:如果SQL語句中的order by 滿足分析函數分析時要求的排序,那么SQL語句中的排序將先執行,分析函數在分析時就不必再排序。
兩者不一致:如果SQL語句中的order by 不滿足分析函數分析時要求的排序,那么SQL語句中的排序將最后在分析函數分析結束后執行排序。

2.3 分析函數中的分組、排序、窗口

分析函數包含三個分析子句:分組(partition by)、排序(order by)、窗口(rows)。

窗口就是分析函數分析時要處理的數據范圍,就拿sum來說,它是sum窗口中的記錄而不是整個分組中的記錄。因此我們在想得到某個欄位的累計值時,我們需要把窗口指定到該分組中的第一行數據到當前行,如果你指定該窗口從該分組中的第一行到最后一行,那么該組中的每一個sum值都會一樣,即整個組的總和。

窗口子句中我們經常用到指定第一行,當前行,最后一行這樣的三個屬性:

第一行是 unbounded preceding

當前行是 current row

最后一行是 unbounded following

窗口子句不能單獨出現,必須有order by 子句時才能出現,如:

LAST_VALUE(SAL) OVER (PARTITION BY DEPTNO ORDER BY SAL ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )

以上示例指定窗口為整個分組.

而出現order by 子句的時候,不一定要有窗口子句,但效果會不一樣,此時窗口默認是當前組的第一行到當前行!

SQL語句為:

SELECT DEPTNO, EMPNO, ENAME, SAL,last_value(SAL) OVER(PARTITION BY DEPTNO ORDER BY SAL) MAX_SAL FROM EMP;

等價于:

SELECT DEPTNO, EMPNO, ENAME, SAL,last_value(SAL) OVER(PARTITION BY DEPTNO ORDER BY SAL ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) MAX_SAL FROM EMP;

結果如下圖:

當省略窗口子句時:

  • 如果存在order by, 則默認的窗口是 unbounded preceding and current row.
  • 如果同時省略order by, 則默認的窗口是 unbounded preceding and unbounded following.

如果省略分組,則把全部記錄當成一個組:

  • 如果存在order by 則默認窗口是unbounded preceding and current row
  • 如果這時省略order by 則窗口默認為 unbounded preceding and unbounded following

可參考:https://www.jb51.net/article/282335.htm

總結

到此這篇關于Oracle中ROW_NUMBER()OVER()函數用法的文章就介紹到這了,更多相關Oracle中ROW_NUMBER()OVER()函數內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Oracle
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美福利在线| 国产精品一区二区精品| 久久亚洲专区| 欧美精品aa| 你懂的国产精品| 欧美日韩一区二区三区不卡视频| 久久亚洲欧洲| 香蕉视频成人在线观看| 日韩av有码| 九九九精品视频| 免费在线观看一区| 久久成人一区| 成人看片网站| 国产传媒在线| 精品亚洲免a| 国产亚洲人成a在线v网站| 日韩精品五月天| 国产精品综合| 欧美日韩亚洲国产精品| 伊人久久成人| 国产欧美日韩精品一区二区免费| 99精品在线| 亚洲精品九九| 狠狠爱成人网| 日韩成人高清| 国产美女亚洲精品7777| 黄色成人91| 欧美不卡在线| 色爱av综合网| 91亚洲国产成人久久精品| 久草免费在线视频| 福利视频一区| 国产亚洲网站| 国产视频一区在线观看一区免费| 免费高潮视频95在线观看网站| 精品久久一区| 国产精品白丝久久av网站| 日韩av字幕| 日韩1区2区日韩1区2区| 亚洲欧美日韩视频二区| 亚洲精品一区二区妖精| 一区二区三区视频免费观看| 四季av一区二区凹凸精品| 精品久久在线| 狠狠干成人综合网| 亚洲欧美日韩精品一区二区| 麻豆国产欧美一区二区三区| 欧美综合二区| 久久国产66| 日韩精品欧美精品| 国产欧美综合一区二区三区| 日韩一区二区中文| 日本一区二区高清不卡| 国产一区二区三区亚洲综合| 国产精品普通话对白| 国产精品一区二区三区美女| 欧美成a人免费观看久久| 日韩av网站免费在线| 国产精品亚洲产品| 男女男精品视频网| 青草综合视频| 精品亚洲成人| 日韩免费高清| 日韩午夜视频在线| 国产日本久久| 久久不见久久见国语| 亚洲在线观看| 精品三级国产| 日本不卡高清视频| 国产亚洲毛片在线| 欧美日韩黄网站| 在线亚洲人成| 亚洲性图久久| 在线亚洲精品| 久久高清免费| 国产伦乱精品| 91成人小视频| 影院欧美亚洲| 久草免费在线视频| 欧美精品aa| 国产麻豆精品| 久久激五月天综合精品| 亚洲欧美伊人| 欧美精品日日操| a日韩av网址| 在线国产一区| 99国内精品| 国产一区导航| 99国产精品视频免费观看一公开| 久久精品亚洲人成影院| 蜜桃精品在线| 亚洲高清久久| 麻豆极品一区二区三区| 亚洲精品第一| 婷婷综合成人| 国产日韩免费| 成人日韩av| 影音先锋久久精品| 日韩精品视频一区二区三区| 日本综合精品一区| 婷婷亚洲五月色综合| 欧美视频一区| 国产精品久一| 国产亚洲精品美女久久 | 精品中文在线| 色天使综合视频| 久久久久97| 国产精品theporn| 国产午夜一区| 日本特黄久久久高潮| 亚洲一区二区日韩| 久久亚洲一区| 国产欧美一区二区色老头| 免费视频亚洲| 日本欧美不卡| 在线亚洲成人| 青青草视频一区| 美女久久久精品| 亚洲国内欧美| 久久免费大视频| 国产精品99在线观看| 久久久久中文| 蜜桃久久久久| 欧美黑人做爰爽爽爽| 国产精品一区二区三区av麻| 亚洲一级黄色| 欧美在线黄色| 国产精品日本一区二区不卡视频| 丝瓜av网站精品一区二区| 亚洲成人三区| 亚洲精品日韩久久| 日韩天堂av| 欧美激情99| 欧美~级网站不卡| 综合国产在线| 国产日韩欧美一区二区三区在线观看 | 国产a亚洲精品| 久久av中文| a天堂资源在线| 麻豆精品蜜桃| 国产第一亚洲| 亚洲深夜福利| 麻豆精品新av中文字幕| 国产欧美日韩免费观看| 日韩午夜精品| 首页欧美精品中文字幕| 国产图片一区| 日韩精品1区2区3区| 美女福利一区二区三区| 日韩中文欧美在线| 国产欧美在线观看免费| 欧洲av不卡| 91嫩草亚洲精品| 国产乱人伦丫前精品视频| 欧美 日韩 国产精品免费观看| 中文字幕亚洲精品乱码| 蜜臀国产一区二区三区在线播放| 日韩超碰人人爽人人做人人添| 国产专区一区| 日韩中文字幕不卡| 午夜久久中文| 黄色在线一区| 特黄特色欧美大片| 欧美日韩调教| 日韩精品视频在线看| 麻豆免费精品视频| 久久亚洲专区| 日韩综合小视频| 麻豆精品久久久| 午夜av成人| 在线看片国产福利你懂的| 国产视频网站一区二区三区| 中文一区二区| 视频一区视频二区中文| 亚洲一级特黄| 久久九九精品| 欧美欧美黄在线二区| 欧美日韩国产综合网| 99久久久国产精品美女| 久久精品国产久精国产爱| 日本色综合中文字幕| 日韩精品第一| 国产精品午夜av| 国产欧美欧美| 精品国产三区在线| 色黄视频在线观看| 欧美综合另类| 中文字幕一区二区精品区| 日韩一区精品| 在线看片日韩| 成人国产精品一区二区免费麻豆| 久久久国产精品入口麻豆| 精品视频一区二区三区在线观看| 久久精品主播| 欧美午夜不卡影院在线观看完整版免费| 亚洲一区二区三区高清不卡| 婷婷综合成人| 亚洲深深色噜噜狠狠爱网站| 韩国一区二区三区视频| 免费视频一区二区三区在线观看|