必须知道的Oracle五个常用开窗函数

示例 1:使用 ROW_NUMBER() 开窗函数

查询员工表中每个部门中前三名工资最高的员工信息

 SELECT DEPARTMENT_NAME,
        LAST_NAME,
        SALARY,
        row_number() OVER (PARTITION BY DEPARTMENT_NAME ORDER BY SALARY DESC) AS RANK
 FROM EMPLOYEES T1,
      DEPARTMENTS T2
 WHERE T1.DEPARTMENT_ID = T2.DEPARTMENT_ID
   AND T2.DEPARTMENT_NAME = 'IT';

DEPARTMENT_NAME

LAST_NAME

SALARY

RANK

IT

Hunold

9000.00

1

IT

Ernst

6000.00

2

IT

Austin

4800.00

3

IT

Pataballa

4800.00

4

IT

Lorentz

4200.00

5



示例 2:使用 RANK() 开窗函数

查询员工表中每个部门中工资排名前三的员工信息

 SELECT DEPARTMENT_NAME,
        LAST_NAME,
        SALARY,
        RANK() OVER (PARTITION BY DEPARTMENT_NAME ORDER BY SALARY DESC) AS RANK
 FROM EMPLOYEES T1,
      DEPARTMENTS T2
 WHERE T1.DEPARTMENT_ID = T2.DEPARTMENT_ID
   AND T2.DEPARTMENT_NAME = 'IT';

DEPARTMENT_NAME

LAST_NAME

SALARY

RANK

IT

Hunold

9000.00

1

IT

Ernst

6000.00

2

IT

Austin

4800.00

3

IT

Pataballa

4800.00

3

IT

Lorentz

4200.00

5



示例 3:使用 DENSE_RANK() 开窗函数

查询员工表中每个部门中工资相同的员工排名相同,排名前三的员工信息

 SELECT DEPARTMENT_NAME,
        LAST_NAME,
        SALARY,
        DENSE_RANK() OVER (PARTITION BY DEPARTMENT_NAME ORDER BY SALARY DESC) AS RANK
 FROM EMPLOYEES T1,
      DEPARTMENTS T2
 WHERE T1.DEPARTMENT_ID = T2.DEPARTMENT_ID
   AND T2.DEPARTMENT_NAME = 'IT';

DEPARTMENT_NAME

LAST_NAME

SALARY

RANK

IT

Hunold

9000.00

1

IT

Ernst

6000.00

2

IT

Austin

4800.00

3

IT

Pataballa

4800.00

3

IT

Lorentz

4200.00

4



示例 4:使用 NTILE() 开窗函数

查询员工表中每个部门中工资分成四组的信息

 SELECT DEPARTMENT_NAME, LAST_NAME, SALARY,
        NTILE(4) OVER (PARTITION BY DEPARTMENT_NAME ORDER BY SALARY DESC) AS GROUP_NUM
 FROM EMPLOYEES T1,
      DEPARTMENTS T2
 WHERE T1.DEPARTMENT_ID = T2.DEPARTMENT_ID
   AND T2.DEPARTMENT_NAME = 'IT';

DEPARTMENT_NAME

LAST_NAME

SALARY

GROUP_NUM

IT

Hunold

9000.00

1

IT

Ernst

6000.00

1

IT

Austin

4800.00

2

IT

Pataballa

4800.00

3

IT

Lorentz

4200.00

4



示例 5:使用 LAG() 开窗函数

查询员工表中每个部门中每个员工的工资和上一个员工工资的差

 SELECT DEPARTMENT_NAME, LAST_NAME, SALARY,
        LAG(SALARY,1) OVER (PARTITION BY DEPARTMENT_NAME ORDER BY LAST_NAME) AS PREV_SALARY,
        SALARY - LAG(SALARY,1) OVER (PARTITION BY DEPARTMENT_NAME ORDER BY LAST_NAME) AS DIFF
 FROM EMPLOYEES T1,
      DEPARTMENTS T2
 WHERE T1.DEPARTMENT_ID = T2.DEPARTMENT_ID
   AND T2.DEPARTMENT_NAME = 'IT';

DEPARTMENT_NAME

LAST_NAME

SALARY

PREV_SALARY

DIFF

IT

Austin

4800.00

null

null

IT

Ernst

6000.00

4800

1200

IT

Hunold

9000.00

6000

3000

IT

Lorentz

4200.00

9000

-4800

IT

Pataballa

4800.00

4200

600


展开阅读全文

页面更新:2024-04-24

标签:函数   示例   工资   员工   常用   员工工资   部门   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top