分析函数
作用:分析函数可以在数据中进行分组,然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。
统计函数:MAX(字段名)、MIN(字段名)、AVG(字段名)、SUM(字段名)、COUNT(字段名)。
--语法结构: --函数名(参数) OVER ([PARTITION BY 字段名] [ORDER BY 字段名]) --分析函数与分组聚合(统计)函数的不同之处: -->普通的聚合函数分组是采用 GROUP BY;而分析函数分组是采用 PARTITION BY; -->分组聚合后的每个分组返回一个统计值;分析函数分组后的每组每行都可以返回一个统计值。 SELECT E.*, COUNT(E.DEPTNO) OVER(PARTITION BY E.DEPTNO ORDER BY E.DEPTNO) CNT, MAX(E.SAL) OVER(PARTITION BY E.DEPTNO ORDER BY E.DEPTNO) MAX_SAL FROM EMP E; SELECT E.DEPTNO,COUNT(E.DEPTNO) FROM EMP E GROUP BY E.DEPTNO; --通过职位分组,按照薪资由高到低排序,显示每个员工信息以及对应的最高薪资是多少 SELECT E.*, MAX(E.SAL) OVER(PARTITION BY E.JOB ORDER BY E.SAL DESC)MSAL FROM EMP E;
排名函数
ROW_NUMBER()/RANK()/DENSE_RANK()
三者的唯一区别在于碰到相同数据时的排名策略:
ROW_NUMBER():
返回一个唯一的值,当碰到相同数据时,排名按照记录集合中的记录顺序由1依次递增;例如:1,2,3,4,5,6,7...
RANK():
返回一个唯一的值,当碰到相同数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。例如:1,2,3,3,3,6,7...
DENSE_RANK():
返回一个唯一的值,当遇到相同数据时,此时所有相同数据的排名是一样的。例如:1,2,3,3,3,4,5,6,7...
SELECT E.*, ROW_NUMBER() OVER(ORDER BY E.SAL) RN, RANK() OVER(ORDER BY E.SAL) RANK, DENSE_RANK() OVER(ORDER BY E.SAL) D_RANK FROM EMP E;
位移函数
--上移函数:LEAD(字段名,上移的行数[,空行的默认值]) SELECT E.EMPNO, E.SAL, LEAD(E.SAL,1) OVER(ORDER BY E.SAL) LEAD_SAL, LEAD(E.SAL,2,8888) OVER(ORDER BY E.SAL) LEAD_SAL_1 FROM EMP E; SELECT E.EMPNO, E.ENAME, E.JOB, E.SAL, LEAD(E.SAL) OVER(PARTITION BY E.JOB ORDER BY E.SAL) LEAD1 FROM EMP E; --下移函数:LAG(字段名,下移的行数[,空行的默认值]) SELECT E.EMPNO, E.SAL, LAG(E.SAL,1) OVER(ORDER BY E.SAL) LAG_SAL, LAG(E.SAL,2,8888) OVER(ORDER BY E.SAL) LAG_SAL_1 FROM EMP E;
同比与环比
同比:指的是相邻的年份,相同的月份或者季度来进行涨幅的比较
同比 = (现阶段 - 上阶段)/ 上阶段;
今年第三季度的销售额为 1000万元,去年第三季度的销售额为 500万元,计算同比
(1000 - 500) / 500 = 1;
环比:指的是相同的年份,连续(相邻)的月份或者季度来进行涨幅的比较
环比 = (现阶段 - 上阶段)/ 上阶段;
今年第三季度的销售额为 1000万元,今年第二季度的销售额为 500万元,计算环比
(1000 - 500) / 500 = 1;
原文:https://www.cnblogs.com/ZeroITStudy/p/13761186.html