开窗函数介绍

文章目录

  • 一、 什么是开窗函数?
  • 二、怎么用开窗函数?
  • 三、开窗函数的种类
    • 3.1 聚合类开窗函数(聚合函数和窗口组合)
    • 3.2 排序类开窗函数

一、 什么是开窗函数?

开窗函数又叫分析函数

开窗函数用于定义一个窗口(这里的窗口是指运算将要操作的数据集合),它对一组值进行操作,
不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回对于一组值的处理结果。

两者区别:

聚合函数:将数据按照一定的规则分组,统一分析各组的某项情况,每个分组返回一行结果
开窗函数:将数据按照一定的规则分组,统一分析各组的某项情况,每行数据返回一行结果

二、怎么用开窗函数?

二.语法
–不加窗口范围
函数名()OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)

分析:
1.PARTITION BY COLUMN1->指明 按照COLUMN1分组
2.ORDER BY COLUMN2->按照COLUMN2列排序
3.分组、排序规则遵循分组排序查询的规则
4.OVER 为开窗函数的标志

三、开窗函数的种类

3.1 聚合类开窗函数(聚合函数和窗口组合)

SUM/MIN/MAX/AVG/COUNT(COLUMN1)OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2);

示例:
查询各个部门的员工编号,姓名,以及各部门的平均薪资
–表连接

SELECT EMPNO, ENAME, AVG_SAL,e.deptno
FROM EMP E,
(SELECT DEPTNO, AVG(SAL) AVG_SAL FROM EMP GROUP BY DEPTNO) D
WHERE E.DEPTNO = D.DEPTNO;

3.2 排序类开窗函数

–查询各个部门前两名的员工的工资

ROW_NUMBER() RANK() DENSE_RANK()

示例:

SELECT EMPNO,ENAME,JOB,SAL,DEPTNO,ROW_NUMBER()OVER(ORDER BY SAL) AVG_SAL FROM EMP;–类似于ROWNUM

SELECT EMPNO,ENAME,JOB,SAL,DEPTNO,ROW_NUMBER()OVER(PARTITION BY DEPTNO ORDER BY SAL) AVG_SAL FROM EMP;–类似于ROWNUM

# 四、使用示例
```sql
SELECT *
  FROM Table1 apm
  LEFT JOIN

 (select r.*
    from (select APB_ID,
                 APB_MERGEID,
                 rank() over(partition by APB_MERGEID order by APB_ID desc) rank_no
            from Table2 ) r
   where r.rank_no = 1) apb1
    on apb1.APB_MERGEID = apm.APM_ID

 where apm.apm_id = 6093

你可能感兴趣的:(数据库)