最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2023年04月25日 09:26:18   作者:遙遠(yuǎn)的救世主○  
Oracle中的row_number()函數(shù)用于在查詢結(jié)果中為每一行生成一個(gè)唯一的行號(hào),下面這篇文章主要給大家介紹了關(guān)于Oracle中ROW_NUMBER()OVER()函數(shù)用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

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

1. 說明:

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

2. 原理:

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

3.語法:

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

4.示例一:

查詢表:SELECT * FROM SCOTT.EMP ;

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

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

根據(jù)工資排序并添加序號(hào)

5. 示例二

1.建立測(cè)試學(xué)生數(shù)據(jù)表

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

2.查學(xué)生數(shù)據(jù)根據(jù)班級(jí)分組,再根據(jù)分?jǐn)?shù)排名。獲取到每個(gè)班級(jí)的學(xué)生分?jǐn)?shù)排名

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

3. 獲取到每個(gè)班級(jí)分?jǐn)?shù)排名第一的學(xué)生

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

重點(diǎn)說明:

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

例如:

將學(xué)生1的分?jǐn)?shù)設(shè)置為 null,再獲取到分組班級(jí)的學(xué)生分?jǐn)?shù)排名

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

修改學(xué)生一在該班級(jí)的排序,分?jǐn)?shù)最低排最后即可修正這個(gè)問題

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

2. 分析函數(shù)的例子二:

2.1 分析函數(shù)的形式:

分析函數(shù)帶有一個(gè)開窗函數(shù)over(),包含三個(gè)分析子句:分組(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

分析函數(shù)的例子:

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

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 表示當(dāng)前行

    unbounded preceding  表示第一行

    unbounded following    表示最后一行

last_value(sal) 的結(jié)果與 order by sal 排序有關(guān)。如果排序?yàn)閛rder by sal desc, 則最終的結(jié)果為分組排序后sal的最小值(分組排序后的最后一個(gè)值), 當(dāng)deptno為10時(shí),max_sal為1300

2.2 兩個(gè)order by 的執(zhí)行機(jī)制

分析函數(shù)是在整個(gè)SQL查詢結(jié)束后(SQL語句中的order by 的執(zhí)行比較特殊)再進(jìn)行的操作,也就是說SQL語句中的order by也會(huì)影響分析函數(shù)的執(zhí)行結(jié)果:

兩者一致:如果SQL語句中的order by 滿足分析函數(shù)分析時(shí)要求的排序,那么SQL語句中的排序?qū)⑾葓?zhí)行,分析函數(shù)在分析時(shí)就不必再排序。
兩者不一致:如果SQL語句中的order by 不滿足分析函數(shù)分析時(shí)要求的排序,那么SQL語句中的排序?qū)⒆詈笤诜治龊瘮?shù)分析結(jié)束后執(zhí)行排序。

2.3 分析函數(shù)中的分組、排序、窗口

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

窗口就是分析函數(shù)分析時(shí)要處理的數(shù)據(jù)范圍,就拿sum來說,它是sum窗口中的記錄而不是整個(gè)分組中的記錄。因此我們?cè)谙氲玫侥硞€(gè)欄位的累計(jì)值時(shí),我們需要把窗口指定到該分組中的第一行數(shù)據(jù)到當(dāng)前行,如果你指定該窗口從該分組中的第一行到最后一行,那么該組中的每一個(gè)sum值都會(huì)一樣,即整個(gè)組的總和。

窗口子句中我們經(jīng)常用到指定第一行,當(dāng)前行,最后一行這樣的三個(gè)屬性:

第一行是 unbounded preceding

當(dāng)前行是 current row

最后一行是 unbounded following

窗口子句不能單獨(dú)出現(xiàn),必須有order by 子句時(shí)才能出現(xiàn),如:

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

以上示例指定窗口為整個(gè)分組.

而出現(xiàn)order by 子句的時(shí)候,不一定要有窗口子句,但效果會(huì)不一樣,此時(shí)窗口默認(rèn)是當(dāng)前組的第一行到當(dāng)前行!

SQL語句為:

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

等價(jià)于:

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;

結(jié)果如下圖:

當(dāng)省略窗口子句時(shí):

  • 如果存在order by, 則默認(rèn)的窗口是 unbounded preceding and current row.
  • 如果同時(shí)省略order by, 則默認(rèn)的窗口是 unbounded preceding and unbounded following.

如果省略分組,則把全部記錄當(dāng)成一個(gè)組:

  • 如果存在order by 則默認(rèn)窗口是unbounded preceding and current row
  • 如果這時(shí)省略order by 則窗口默認(rèn)為 unbounded preceding and unbounded following

可參考:http://m.fzitv.net/article/282335.htm

總結(jié)

到此這篇關(guān)于Oracle中ROW_NUMBER()OVER()函數(shù)用法的文章就介紹到這了,更多相關(guān)Oracle中ROW_NUMBER()OVER()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用imp和exp命令對(duì)Oracle數(shù)據(jù)庫進(jìn)行導(dǎo)入導(dǎo)出操作詳解

    使用imp和exp命令對(duì)Oracle數(shù)據(jù)庫進(jìn)行導(dǎo)入導(dǎo)出操作詳解

    這篇文章主要介紹了使用imp和exp命令對(duì)Oracle數(shù)據(jù)庫進(jìn)行導(dǎo)入導(dǎo)出操作詳解,文中通過示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • oracle索引總結(jié)

    oracle索引總結(jié)

    這篇文章要給大家介紹的是oracle索引,索引是數(shù)據(jù)庫對(duì)象之一,用于加快數(shù)據(jù)的檢索,類似于書籍的索引。在數(shù)據(jù)庫中索引可以減少數(shù)據(jù)庫程序查詢結(jié)果時(shí)需要讀取的數(shù)據(jù)量,類似于在書籍中我們利用索引可以不用翻閱整本書即可找到想要的信息。 感興趣的小伙伴可參考一下
    2021-09-09
  • 深入探討:oracle中方案的概念以及方案與數(shù)據(jù)庫的關(guān)系

    深入探討:oracle中方案的概念以及方案與數(shù)據(jù)庫的關(guān)系

    本篇文章是對(duì)oracle中方案的概念以及方案與數(shù)據(jù)庫的關(guān)系進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Oracle?Users表空間重命名問題解決

    Oracle?Users表空間重命名問題解決

    這篇文章主要介紹了Oracle?Users表空間重命名問題,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Oracle 高速批量數(shù)據(jù)加載工具sql*loader使用說明

    Oracle 高速批量數(shù)據(jù)加載工具sql*loader使用說明

    SQL*Loader(SQLLDR)是Oracle的高速批量數(shù)據(jù)加載工具,這是一個(gè)非常有用的工具,可用于多種平面文件格式向Oralce數(shù)據(jù)庫中加載數(shù)據(jù)
    2012-12-12
  • Oracle中的定時(shí)任務(wù)實(shí)例教程

    Oracle中的定時(shí)任務(wù)實(shí)例教程

    定時(shí)任務(wù)相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于Oracle中定時(shí)任務(wù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Oracle數(shù)據(jù)的插入insert、更新update、刪除delete、truncate舉例詳解

    Oracle數(shù)據(jù)的插入insert、更新update、刪除delete、truncate舉例詳解

    SQL語法是所有操作的基礎(chǔ),包括創(chuàng)建、查詢、更新和刪除數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)的插入insert、更新update、刪除delete、truncate的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Oracle SYSAUX表空間使用率過高的處理辦法

    Oracle SYSAUX表空間使用率過高的處理辦法

    Oracle數(shù)據(jù)庫中的SYSAUX表空間是一個(gè)特殊的表空間,它是在Oracle數(shù)據(jù)庫10g版本中引入的,SYSAUX表空間用于存儲(chǔ)數(shù)據(jù)庫的輔助系統(tǒng)數(shù)據(jù)和附加組件數(shù)據(jù),在本文中,我們將深入探討Oracle SYSAUX表空間使用率過高的處理辦法,需要的朋友可以參考下
    2024-09-09
  • VMware中l(wèi)inux環(huán)境下oracle安裝圖文教程(二)ORACLE 10.2.05版本的升級(jí)補(bǔ)丁安裝

    VMware中l(wèi)inux環(huán)境下oracle安裝圖文教程(二)ORACLE 10.2.05版本的升級(jí)補(bǔ)丁安裝

    這篇文章是VMware中l(wèi)inux環(huán)境下oracle安裝圖文教程系列的第二篇,主要介紹了ORACLE 10.2.05版本的升級(jí)補(bǔ)丁安裝,需要的朋友可以參考下
    2014-08-08
  • Oracle database恢復(fù)被修改的視圖實(shí)現(xiàn)方式

    Oracle database恢復(fù)被修改的視圖實(shí)現(xiàn)方式

    同事發(fā)現(xiàn)視圖被修改,通過LAST_DDL_TIME定位修改時(shí)間,利用dba_views.text字段回溯舊SQL內(nèi)容恢復(fù)視圖,建議生產(chǎn)環(huán)境創(chuàng)建視圖時(shí)避免使用CREATE OR REPLACE
    2025-09-09

最新評(píng)論

汤阴县| 汨罗市| 嘉荫县| 宿迁市| 类乌齐县| 通城县| 喀喇沁旗| 枝江市| 西华县| 蒲城县| 葵青区| 商南县| 巴南区| 清丰县| 玉田县| 江阴市| 贵德县| 保靖县| 德安县| 万盛区| 桦南县| 伽师县| 宣恩县| 台安县| 玉溪市| 灯塔市| 九龙坡区| 石狮市| 南郑县| 蕲春县| 松桃| 盐亭县| 屏边| 武定县| 三原县| 澄迈县| 汾西县| 七台河市| 东兰县| 合江县| 霍城县|