oracle分析函数

简单记录一下oracle 分析函数的使用,随用随更新。

1)max(xx) over(partition by xx) /min(xx) over (partition by xx)

scott/tiger连接:

SQL>SELECT emp.*, max(sal) over(partition by deptno) maxsal FROM EMP;

说明:检索员工所在部门的最高工资。

SQL> SELECT emp.*, max(sal) over(partition by deptno) maxsal FROM EMP;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO     MAXSAL
----- ---------- --------- ----- ----------- --------- --------- ------ ----------
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10       5000
 7839 KING         PRESIDENT       1981-11-17    5000.00               10       5000
 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10       5000
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20       3000
 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20       3000
 7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20       3000
 7369 SMITH      CLERK      7902 1980-12-17     800.00               20       3000
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20       3000
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30       2850
 7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30       2850
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30       2850
 7900 JAMES      CLERK      7698 1981-12-3      950.00               30       2850
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30       2850
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30       2850
 
14 rows selected

2)PERCENTILE_CONT(n) WITHIN GROUP (ORDER BY SAL DESC ) 此函数为聚合函数。

例如:PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY SAL DESC )

0.5表示取中间数,测试观察便知,n的取值范围0-1。

SQL>SELECT deptno, PERCENTILE_CONT(0) WITHIN GROUP( ORDER BY SAL DESC) ME
    2       FROM EMP
    3     group by deptno;

DEPTNO         ME
---- ----------
    10       5000
    20       3000
    30       2850

说明:按部门分组,检索该部门工资最高的记录,由于此函数为聚合函数,所以和第一个介绍的分析函数还有些区别。测试查询便知。

3)PERCENTILE_CONT(n) WITHIN GROUP( ORDER BY xx DESC) OVER(PARTITION BY XX)

例如:PERCENTILE_CONT(0) WITHIN GROUP( ORDER BY SAL DESC) over(partition by deptno) 非聚合函数

SQL>SELECT emp.*, PERCENTILE_CONT(0) WITHIN GROUP( ORDER BY SAL DESC) over(partition by  deptno)    ME   FROM EMP;

SQL> SELECT emp.*, PERCENTILE_CONT(0) WITHIN GROUP( ORDER BY SAL DESC) over(partition by  deptno)    ME   FROM EMP;

测试结果图如下:
 

4)PERCENT_RANK() OVER([partition_clause] order_by_clause)

例如:PERCENT_RANK() OVER(partition by deptno order by sal desc)

5)NTILE(n) OVER([partition_clause] order_by_clause)

举例:NTILE(5) OVER(order by sal desc)

说明:按照你指定的组数(n)对记录做分组

注意:如果不能按照你指定的分组数平均分配记录数,则最后的组数的记录数将和之前的不一样多。

 

 

Oracle分析函数——函数列表 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算一个组和数据窗口内表达式的平均值。 COUNT :对一组内发生的事情进行累积计数 ------------------------------------------------------------------------------------------------- RANK :根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置 DENSE_RANK :根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置 FIRST :从DENSE_RANK返回的集合中取出排在最前面的一个值的行 LAST :从DENSE_RANK返回的集合中取出排在最后面的一个值的行 FIRST_VALUE :返回组中数据窗口的第一个值 LAST_VALUE :返回组中数据窗口的最后一个值。 LAG :可以访问结果集中的其它行而不用进行自连接 LEAD :LEAD与LAG相反,LEAD可以访问组中当前行之后的行 ROW_NUMBER :返回有序组中一行的偏移量,从而可用于按特定标准排序的行号 ------------------------------------------------------------------------------------------------- STDDEV :计算当前行关于组的标准偏离 STDDEV_POP:该函数计算总体标准偏离,并返回总体变量的平方根 STDDEV_SAMP:该函数计算累积样本标准偏离,并返回总体变量的平方根 VAR_POP :该函数返回非空集合的总体变量(忽略null) VAR_SAMP :该函数返回非空集合的样本变量(忽略null) VARIANCE :如果表达式中行数为1,则返回0,如果表达式中行数大于1,则返回VAR_SAMP COVAR_POP :返回一对表达式的总体协方差 COVAR_SAMP :返回一对表达式的样本协方差 CORR :返回一对表达式的相关系数 ------------------------------------------------------------------------------------------------- CUME_DIST :计算一行在组中的相对位置 NTILE :将一个组分为"表达式"的散列表示 PERCENT_RANK :和CUME_DIST(累积分配)函数类似 PERCENTILE_DISC :返回一个与输入的分布百分比值相对应的数据值 PERCENTILE_CONT :返回一个与输入的分布百分比值相对应的数据值 RATIO_TO_REPORT :该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比 REGR_ (Linear Regression) Functions :这些线性回归函数适合最小二乘法回归线,有9个不同的回归函数可使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值