over()函数是Oracle的分析函数,其语法如下:
函数名( [参数 ]) over( [分区子句 ] [排序子句 [滑动窗口子句 ] ])
分区子句类似于聚组函数所需要的group by,排序子句可看成是SQL语句中的order by,只不过在此语句中还可指定null值排前(nulls first)还是排后(nulls last)。
具体用法:
1、sum(num) over()
SELECT JKRQ,SE,SUM(SE) OVER () FROM SBZSHX.SB_LC_YQNS_SP;
对查询字段进行求和,查询结果条数不变(区别于直接写sum)
2、sum(num) over (order by num)
select JKRQ,SE,sum(SE) over (order by SE) from SBZSHX.SB_LC_YQNS_SP;
对查询字段进行排序后,再累计求和
3、sum(num) over(partition by num)
select JKRQ,SE,sum(SE) over (PARTITION BY JKRQ) from SBZSHX.SB_LC_YQNS_SP;
对查询字段分区,在分区内求和(查询结果条数不变)
4、sum(SE) over (PARTITION BY JKRQ order by SE)
select JKRQ,SE,sum(SE) over (PARTITION BY JKRQ order by SE) from SBZSHX.SB_LC_YQNS_SP;
对查询字段进行分区,在分区内进行累计求和
5、ROW_NUMBER() OVER(ORDER BY SE)
SELECT JKRQ,SE,ROW_NUMBER() OVER(ORDER BY SE) from SBZSHX.SB_LC_YQNS_SP;
对查询字段进行排序,根据排序编号
6、RANK() OVER (ORDER BY SE)
SELECT JKRQ,SE,RANK() OVER (ORDER BY SE) FROM SBZSHX.SB_LC_YQNS_SP;
对查询字段进行排序,并根据查询字段的值编号
7、DENSE_RANK() OVER(ORDER BY SE)
SELECT JKRQ,SE,DENSE_RANK() OVER(ORDER BY SE) FROM SBZSHX.SB_LC_YQNS_SP;
对查询字段进行排序,并根据查询字段的值编号(连续)