日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
講解一下Oracle分析函數(shù)ROW_NUMBER()

本篇文章重點為大家講解一下Oracle 分析函數(shù) ROW_NUMBER() 的使用方法,有需要的小伙伴可以參考一下。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供延平企業(yè)網(wǎng)站建設,專注與成都做網(wǎng)站、成都網(wǎng)站建設、HTML5建站、小程序制作等業(yè)務。10年已為延平眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。

1、row_number() over()排序功能:

row_number() over()分組排序功能:

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

partition by 用于給結果集分組,如果沒有指定那么它把整個結果集作為一個分組,它和聚合函數(shù)不同的地方在于它能夠返回一個分組中的多條記錄,而聚合函數(shù)一般只有一個反映統(tǒng)計值的記錄。

例如:emp,根據(jù)部門分組排序。

SQL> select empno,deptno,sal ,row_number() over (partition by deptno order by sal desc) rank from emp;

EMPNO  DEPTNO  SAL   RANK
---------- ---------- ---------- ----------
  7839 10  5000 1
  7782 10  2450 2
  7934 10  1300 3
  7788 20  3000 1
  7902 20  3000 2
  7566 20  2975 3
  7876 20  1100 4
  7369 20  800 5
  7698 30  2850 1
  7499 30  1600 2
  7844 30  1500 3
  7654 30  1250 4
  7521 30  1250 5
  7900 30  950 6
14 rows selected.

(2)對查詢結果進行排序:(無分組)

SQL> select empno,deptno,sal ,row_number() over (order by sal desc) rank from emp;

EMPNO  DEPTNO  SAL   RANK
---------- ---------- ---------- ----------
  7839 10  5000 1
  7902 20  3000 2
  7788 20  3000 3
  7566 20  2975 4
  7698 30  2850 5
  7782 10  2450 6
  7499 30  1600 7
  7844 30  1500 8
  7934 10  1300 9
  7521 30  1250 10
  7654 30  1250 11
  7876 20  1100 12
  7900 30  950 13
  7369 20  800 14
14 rows selected.

row_number() over()和rownum差不多,功能更強一點(可以在各個分組內(nèi)從1開時排序).

2、rank() over()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內(nèi)).

SQL> select empno,deptno,sal ,rank() over (partition by deptno order by sal desc) rank from emp;

EMPNO  DEPTNO  SAL   RANK
---------- ---------- ---------- ----------
  7839 10  5000 1
  7782 10  2450 2
  7934 10  1300 3
  7788 20  3000 1
  7902 20  3000 1      
  7566 20  2975 3     --跳躍了
  7876 20  1100 4
  7369 20  800 5
  7698 30  2850 1
  7499 30  1600 2
  7844 30  1500 3
  7654 30  1250 4
  7521 30  1250 4
  7900 30  950 6
14 rows selected.

SQL> select empno,deptno,sal ,rank() over (order by sal desc) rank from emp;

EMPNO  DEPTNO  SAL   RANK
---------- ---------- ---------- ----------
  7839 10  5000 1
  7902 20  3000 2
  7788 20  3000 2
  7566 20  2975 4    --跳躍了
  7698 30  2850 5
  7782 10  2450 6
  7499 30  1600 7
  7844 30  1500 8
  7934 10  1300 9
  7521 30  1250 10
  7654 30  1250 10
  7876 20  1100 12
  7900 30  950 13
  7369 20  800 14
14 rows selected.

3、dense_rank() over()是連續(xù)排序,有兩個第二名時仍然跟著第三名。相比之下row_number是沒有重復值的 .

SQL> select empno,deptno,sal ,dense_rank() over (order by sal desc) rank from emp;

EMPNO  DEPTNO  SAL   RANK
---------- ---------- ---------- ----------
  7839 10  5000 1
  7902 20  3000 2
  7788 20  3000 2
  7566 20  2975 3
  7698 30  2850 4
  7782 10  2450 5
  7499 30  1600 6
  7844 30  1500 7
  7934 10  1300 8
  7521 30  1250 9
  7654 30  1250 9
  7876 20  1100 10
  7900 30  950 11
  7369 20  800 12
14 rows selected.

SQL> select empno,deptno,sal ,dense_rank() over (partition by deptno order by sal desc) rank from emp;

EMPNO  DEPTNO  SAL   RANK
---------- ---------- ---------- ----------
  7839 10  5000 1
  7782 10  2450 2
  7934 10  1300 3
  7788 20  3000 1
  7902 20  3000 1
  7566 20  2975 2  --不跳躍
  7876 20  1100 3
  7369 20  800 4
  7698 30  2850 1
  7499 30  1600 2
  7844 30  1500 3
  7654 30  1250 4
  7521 30  1250 4
  7900 30  950 5
14 rows selected.

使用ROW_NUMBER刪除重復數(shù)據(jù)

—假設表TAB中有a,b,c三列,可以使用下列語句刪除a,b,c都相同的重復行。

DELETE FROM (select year,QUARTER,RESULTS,row_number() over(partition by YEAR,QUARTER,RESULTS order by YEAR,QUARTER,RESULTS) AS ROW_NO FROM SALE )

WHERE ROW_NO>1


網(wǎng)站題目:講解一下Oracle分析函數(shù)ROW_NUMBER()
標題URL:http://www.dlmjj.cn/article/djsgdgj.html