Oracle分析函数使用总结

Oracle分析函数使用总结1.使用评级函数评级函数(ranking function)用于计算等级、百分点、n分片等等,下面是几个常用到的评级函数:RANK():返回数据项在分组中的排名。

特点:在排名相等的情况下会在名次中留下空位DENSE_RANK():与RANK不同的是它在排名相等的情况下不会在名次中留下空位CUME_DIST():返回特定值相对于一组值的位置:他是“cumulative distribution”(累积分布)的简写PERCENT_RANK():返回某个值相对于一组值的百分比排名NTILE():返回n分片后的值,比如三分片、四分片等等ROW_NUMBER():为每一条分组纪录返回一个数字下面我们分别举例来说明这些函数的使用1)RANK()与DENSE-RANK()首先显示下我们的源表数据的结构及部分数据:SQL> desc all_sales;名称是否为空? 类型----------------------------------------- -------- -----------YEAR NOT NULL NUMBER(38)MONTH NOT NULL NUMBER(38)PRD_TYPE_ID NOT NULL NUMBER(38)EMP_ID NOT NULL NUMBER(38)AMOUNT NUMBER(8,2)SQL> select * from all_sales where rownum<11;YEAR MONTH PRD_TYPE_ID EMP_ID AMOUNT---------- ---------- ----------- ---------- ----------2003 1 1 21 10034.842003 2 1 21 15144.652003 3 1 21 20137.832003 4 1 21 25057.452003 5 1 21 17214.562003 6 1 21 15564.642003 7 1 21 12654.842003 8 1 21 17434.822003 9 1 21 19854.572003 10 1 21 21754.19已选择10行。

好接下来我们将举例来说明上述函数的使用:首先是RANK()与DENSE-RANK()的使用:SQL> select2 prd_type_id,sum(amount),3 RANK() OVER (ORDER BY SUM(amount) DESC) AS rank,4 DENSE_RANK() OVER (ORDER BY SUM(amount) DESC) AS dense_rank5 from all_sales6 where year=20037 group by prd_type_id8 order by rank;PRD_TYPE_ID SUM(AMOUNT) RANK DENSE_RANK----------- ----------- ---------- ----------5 1 11 905081.842 23 478270.91 3 34 402751.16 4 42 186381.22 5 5注意:这里PRD_TYPE_ID列为5的SUM(AMOUNT)的值为空,RANK()和DENSE-RANK在这一行的返回值为1。

因为默认状态下RANK()和DENSE-RANK()在递减排序中将空值指定为最高排名1,而在递增排序中则把它指定为最低排名。

这里还有一个问题就是我们的例子中没有SUM(AMOUNT)相等的值,如果有的话RANK与DENSE-RANK将表现出区别比如上面的例子如果PRD_TYPE_ID为4的SUM (AMOUNT)的值也为:478270.91的话,那么上面语句的输出则为:PRD_TYPE_ID SUM(AMOUNT) RANK DENSE_RANK----------- ----------- ---------- ----------5 1 11 905081.842 23 478270.91 3 34 478270.91 3 32 186381.22 5 4此外这里还有两个参数来限制空值的排序即:NULLS FIRST和NULLS LAST我们还以上面的例子来看:SQL> select2 prd_type_id,sum(amount),3 RANK() OVER (ORDER BY SUM(amount) DESC NULLS LAST) AS rank,4 DENSE_RANK() OVER (ORDER BY SUM(amount) DESC NULLS LAST) AS dense_rank5 from all_sales6 where year=20037 group by prd_type_id8* order by rankPRD_TYPE_ID SUM(AMOUNT) RANK DENSE_RANK----------- ----------- ---------- ----------1 905081.84 1 13 478270.91 2 24 402751.16 3 32 186381.22 4 45 5 5可以看出刚才我们不使用NULLS LAST时PRD_TYPE_ID为5的空值的排序位于第一,现在则位于第五。

接下来来看分析函数与PARTITION BY子句的结合使用:当需要把分组划分为子分组时,那么我们便可以结合PRA TITION BY子句和分析函数同时使用。

如下例根据月份划分销量:SQL> select2 prd_type_id,month,SUM(amount),3 RANK() OVER (PARTITION BY month ORDER BY SUM(amount) DESC) AS rank4 from all_sales5 where year=20036 and amount IS NOT NULL7 GROUP BY prd_type_id,month8* ORDER BY month,rankPRD_TYPE_ID MONTH SUM(AMOUNT) RANK----------- ---------- ----------- ----------1 1 38909.04 13 1 24909.04 24 1 17398.43 32 1 14309.04 41 2 70567.9 14 2 17267.9 23 2 15467.9 32 2 13367.9 41 3 91826.98 14 3 31026.98 23 3 20626.98 3PRD_TYPE_ID MONTH SUM(AMOUNT) RANK----------- ---------- ----------- ----------2 3 16826.98 41 4 120344.7 13 4 23844.7 24 4 16144.7 32 4 15664.7 41 5 97287.36 14 5 20087.36 23 5 18687.36 32 5 18287.36 41 6 57387.84 14 6 33087.84 2PRD_TYPE_ID MONTH SUM(AMOUNT) RANK----------- ---------- ----------- ----------3 6 19887.84 32 6 14587.84 43 7 81589.04 11 7 60929.04 22 7 15689.04 34 7 12089.04 41 8 75608.92 13 8 62408.92 24 8 58408.92 32 8 16308.92 41 9 85027.42 1PRD_TYPE_ID MONTH SUM(AMOUNT) RANK----------- ---------- ----------- ----------4 9 49327.42 23 9 46127.42 32 9 19127.42 41 10 105305.22 14 10 75325.14 23 10 70325.29 32 10 13525.14 41 11 55678.38 13 11 46187.38 24 11 42178.38 32 11 16177.84 4PRD_TYPE_ID MONTH SUM(AMOUNT) RANK----------- ---------- ----------- ----------3 12 48209.04 11 12 46209.04 24 12 30409.05 32 12 12509.04 4已选择48行。

接下来我们再来看分析函数与我们上次学的ROLLUP、CUBE、GROUPING SETS的结合使用:SELECTprd_type_id,SUM(amount),RANK() OVER (ORDER BY SUM(amount) DESC NULLS LAST) AS rankFROM all_salesWHERE year=2003GROUP BY ROLLUP(prd_type_id)ORDER BY rank;PRD_TYPE_ID SUM(AMOUNT) RANK1972485.13 1 (注:RULLUP的总计排在了最前)1 905081.84 23 478270.91 34 402751.16 42 186381.22 55 6SELECTprd_type_id,emp_id,SUM(amount),RANK() OVER (ORDER BY SUM(amount) DESC NULLS LAST) AS rank FROM all_salesWHERE year=2003GROUP BY CUBE(prd_type_id,emp_id)ORDER BY prd_type_id,emp_id;PRD_TYPE_ID EMP_ID SUM(AMOUNT) RANK----------- ---------- ----------- ----------1 21 197916.96 121 22 214216.96 101 23 98896.96 191 24 207216.96 111 25 93416.96 211 26 93417.04 201 905081.84 22 21 20426.96 332 22 19826.96 342 23 19726.96 352 24 43866.96 27PRD_TYPE_ID EMP_ID SUM(AMOUNT) RANK----------- ---------- ----------- ----------2 25 32266.96 312 26 50266.42 242 186381.22 143 21 140326.96 153 22 116826.96 163 23 112026.96 173 24 34829.96 293 25 29129.96 323 26 45130.11 263 478270.91 34 21 108326.96 18PRD_TYPE_ID EMP_ID SUM(AMOUNT) RANK----------- ---------- ----------- ----------4 22 81426.96 234 23 92426.96 224 24 47456.96 254 25 33156.96 304 26 39956.36 284 402751.16 65 21 365 22 365 23 365 24 365 25 36PRD_TYPE_ID EMP_ID SUM(AMOUNT) RANK----------- ---------- ----------- ----------5 26 365 3621 466997.84 422 432297.84 523 323077.84 824 333370.84 725 187970.84 1326 228769.93 91972485.13 1已选择42行。

合集下载

ORACLE_分析函数大全

ORACLE_分析函数大全

ORACLE_分析函数大全Oracle分析函数是一种高级SQL函数,它可以在查询中实现一系列复杂的分析操作。

这些函数可以帮助我们在数据库中执行各种数据分析和报表生成任务。

本文将介绍Oracle数据库中的一些常用分析函数。

1.ROW_NUMBER函数:该函数为查询结果中的每一行分配一个唯一的数字。

可以用它对结果进行排序或分组。

例如,可以使用ROW_NUMBER函数在结果集中为每个员工计算唯一的编号。

2.RANK和DENSE_RANK函数:这两个函数用于计算结果集中每个行的排名。

RANK函数返回相同值的行具有相同的排名,并且下一个排名值将被跳过。

DENSE_RANK函数类似,但是下一个排名值不会被跳过。

G和LEAD函数:LAG函数返回结果集中指定列的前一个(上一个)行的值,而LEAD函数返回后一个(下一个)行的值。

这些函数通常用于计算增长率或发现趋势。

4.FIRST和LAST函数:这两个函数用于返回结果集中分组的第一个和最后一个行的值。

可以与GROUPBY子句一起使用。

5.CUME_DIST函数:该函数用于计算给定值的累积分布。

它返回值的累积分布在结果集中的位置(百分比)。

6.PERCENT_RANK函数:该函数用于计算结果集中每个行的百分位数排名。

它返回值的百分位数排名(0到1之间的小数)。

7. NTILE函数:该函数用于将结果集分成指定数量的桶(Bucket),并为每个行分配一个桶号。

通常用于将数据分组为更小的块。

8.LISTAGG函数:该函数将指定列的值连接成一个字符串,并使用指定的分隔符分隔每个值。

可以用它将多个值合并在一起形成一个字符串。

9.AVG、SUM、COUNT和MAX/MIN函数:这些是常见的聚合函数,可以在分析函数中使用。

它们用于计算结果集中的平均值、总和、计数和最大/最小值。

以上只是Oracle数据库中的一些常用分析函数。

还有其他一些分析函数,如PERCENTILE_CONT、PERCENTILE_DISC等可以用于更高级的分析计算。

Oracle分析函数用法详解

Oracle分析函数用法详解

Oracle分析函数Oracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的。

Oracle从8.1.6开始提供分析函数。

一、基本语法oracle分析函数的语法:function_name(arg1,arg2,...)over(<partition-clause> <order-by-clause ><windowing clause>)说明:1.partition-clause 数据记录集分组2.order-by-clause 数据记录集排序3.windowing clause 功能非常强大、比较复杂,定义分析函数在操作行的集合。

有三种开窗方式: range、row、specifying。

二、常用分析函数1. avg(distinct|all expression) 计算组内平均值,distinct 可去除组内重复数据select deptno,empno,sal,avg(sal) over (partition by deptno) avg_sal from t;DEPTNO EMPNO SAL AVG_SAL---------- ---------- ---------- ----------10 7782 2450 2916.666677839 5000 2916.666677934 1300 2916.6666720 7566 2975 21757902 3000 21757876 1100 21757369 800 21757788 3000 217530 7521 1250 1566.666677844 1500 1566.666677499 1600 1566.666677900 950 1566.666677698 2850 1566.666677654 1250 1566.666672.count(<distinct><*><expression>) 对组内数据进行计数3.rank() 和dense_rank()dense_rank()根据 order by 子句表达式的值,从查询返回的每一行,计算和其他行的相对位置,序号从 1 开始,有重复值时序号不跳号。

ORACLE中的ROW_NUMBEROVER分析函数的用法

ORACLE中的ROW_NUMBEROVER分析函数的用法

ORACLE中的ROW_NUMBEROVER分析函数的用法ROW_NUMBER(OVER(是ORACLE数据库中的一个分析函数,用来为结果集中的每一行分配一个唯一的序号。

ROW_NUMBER(OVER(的语法是:ROW_NUMBER( OVER ( [ PARTITION BY expr1 [, expr2, ...] ]ORDER BY clause )其中,PARTITIONBY子句可选,用来指定分区依据的列或表达式;ORDERBY子句用来指定排序的列或表达式。

ROW_NUMBER(OVER(常用在查询结果需要进行分页或者进行排序后获取前几行的场景中。

以下是ROW_NUMBER(OVER(的用法示例:示例1:查询员工表中每个部门的员工数,并按照员工数降序排序。

SELECT department_id, count(*) as employee_count,ROW_NUMBER( OVER (ORDER BY count(*) DESC) as rankFROM employeesGROUP BY department_idORDER BY count(*) DESC;在这个示例中,ROW_NUMBER(OVER(函数根据部门中的员工数进行降序排序,并为每个部门分配一个唯一的序号。

示例2:查询员工表中每个部门的员工数,并按照员工数降序排序,并且只返回前三名。

SELECT department_id, count(*) as employee_count,ROW_NUMBER( OVER (ORDER BY count(*) DESC) as rankFROM employeesGROUP BY department_idWHERE rank <= 3ORDER BY count(*) DESC;在这个示例中,ROW_NUMBER(OVER(函数的结果用于限制查询结果只返回前三名。

示例3:查询员工表中每个部门的员工信息,并按照部门和薪水进行排序。

oracle累积求和分析函数sumover的使用

oracle累积求和分析函数sumover的使用

oracle累积求和分析函数sumover的使⽤oracle sum()over函数的使⽤over不能单独使⽤,要和分析函数:rank(),dense_rank(),row_number()等⼀起使⽤。

over函数的参数:over(partition by columnname1 order by columnname2)含义,按columname1指定的字段进⾏分组排序,或者说按字段columnname1的值进⾏分组排序。

例如:employees表中,有两个部门的记录:department_id =10和20select department_id,rank() over(partition by department_id order by salary) from employees 就是指在部门10中进⾏薪⽔的排名,在部门20中进⾏薪⽔排名。

如果是partition by org_id,则是在整个公司内进⾏排名。

-------------------------------sum(...) over ... 的使⽤根据over(...)条件的不同使⽤ sum(sal) over (order by ename)... 查询员⼯的薪⽔“连续”求和;注意over (order by ename)如果没有order by ⼦句,求和就不是“连续”的,把所有的值加到⼀起作为⼀个值。

体会⼀下不同之处:SQL> select deptno,ename,sal,2 sum(sal) over (order by ename) 连续求和,3 sum(sal) over () 总和, -- 此处sum(sal) over () 等同于sum(sal)4 100*round(sal/sum(sal) over (),4) "份额(%)"5 from emp6 / DEPTNO ENAME SAL 连续求和总和份额(%)---------- ---------- ---------- ---------- ---------- ----------20 ADAMS 1100 1100 29025 3.7930 ALLEN 1600 2700 29025 5.5130 BLAKE 2850 5550 29025 9.8210 CLARK 2450 8000 29025 8.4420 FORD 3000 11000 29025 10.3430 JAMES 950 11950 29025 3.2720 JONES 2975 14925 29025 10.2510 KING 5000 19925 29025 17.2330 MARTIN 1250 21175 29025 4.3110 MILLER 1300 22475 29025 4.4820 SCOTT 3000 25475 29025 10.3420 SMITH 800 26275 29025 2.7630 TURNER 1500 27775 29025 5.1730 WARD 1250 29025 29025 4.31使⽤⼦分区查出各部门薪⽔连续的总和。

oracle常用的分析函数

oracle常用的分析函数

oracle常⽤的分析函数常⽤的分析函数如下所列:row_number() over(partition by ... order by ...)rank() over(partition by ... order by ...)dense_rank() over(partition by ... order by ...)count() over(partition by ... order by ...)max() over(partition by ... order by ...)min() over(partition by ... order by ...)sum() over(partition by ... order by ...)avg() over(partition by ... order by ...)first_value() over(partition by ... order by ...)last_value() over(partition by ... order by ...)lag() over(partition by ... order by ...)lead() over(partition by ... order by ...)⼀、Oracle分析函数简介:在⽇常的⽣产环境中,我们接触得⽐较多的是OLTP系统(即Online Transaction Process),这些系统的特点是具备实时要求,或者⾄少说对响应的时间多长有⼀定的要求;其次这些系统的业务逻辑⼀般⽐较复杂,可能需要经过多次的运算。

⽐如我们经常接触到的电⼦商城。

在这些系统之外,还有⼀种称之为OLAP的系统(即Online Aanalyse Process),这些系统⼀般⽤于系统决策使⽤。

通常和数据仓库、数据分析、数据挖掘等概念联系在⼀起。

这些系统的特点是数据量⼤,对实时响应的要求不⾼或者根本不关注这⽅⾯的要求,以查询、统计操作为主。

oraclelag函数用法

oraclelag函数用法

oraclelag函数用法Lag函数是Oracle数据库中的一个分析函数,用于获取指定列的前一个记录的值。

Lag函数可以在查询结果中返回前一行的值,以便与当前行的值进行比较和计算。

Lag函数的一般语法如下:LAG (column, offset, default)OVER (PARTITION BY partition_col ORDER BY order_col)其中,column是指定的列名,offset是偏移量,表示要返回的前一行的偏移量,默认为1,即返回前一行的值。

default是可选的默认值,用于指定当无前一行时返回的值。

PARTITION BY子句是可选的,用于对查询结果进行分组,类似于GROUP BY子句。

ORDER BY子句用于按照指定的列对查询结果进行排序。

Lag函数的使用场景非常多,可以用于计算各种数据间的差异,分析序列数据的变化趋势,或者在查询结果中获取前一行的值等。

下面将通过一些示例来详细说明Lag函数的用法。

1.计算当前行与前一行的差值假设有一个订单表,其中包含订单号、订单金额和订单日期等列。

我们可以使用Lag函数计算当前订单金额与前一订单金额的差值,以便分析订单金额的变化情况。

SELECT order_number, order_amount,order_amount - LAG(order_amount, 1, 0) OVER (ORDER BYorder_number) AS diffFROM order_table;在以上示例中,LAG函数用于获取前一行的订单金额,然后与当前行的订单金额进行相减,得到订单金额的变化量。

第一个参数为订单金额列,第二个参数为偏移量1表示获取前一行的值,第三个参数为默认值0,表示当无前一行时返回0。

2.获取前一行的值Lag函数还可以用于在查询结果中获取前一行的值,以便与当前行的值进行比较和计算。

SELECT id, value, LAG(value, 1, 0) OVER (ORDER BY id) ASprev_valueFROM table_name;在以上示例中,LAG函数用于获取前一行的value值,然后将其作为列名为prev_value的新列添加到查询结果中。

Oracle之分析函数

Oracle之分析函数⼀、分析函数 1、分析函数 分析函数是Oracle专门⽤于解决复杂报表统计需求的功能强⼤的函数,它可以在数据中进⾏分组然后计算基于组的某种统计值,并且每⼀组的每⼀⾏都可以返回⼀个统计值。

2、分析函数和聚合函数的区别 普通的聚合函数⽤group by分组,每个分组返回⼀个统计值,⽽分析函数采⽤partition by分组,并且每组每⾏都可以返回⼀个统计值。

3、分析函数的形式 分析函数带有⼀个开窗函数over(),包含分析⼦句。

分析⼦句⼜由下⾯三部分组成: partition by :分组⼦句,表⽰分析函数的计算范围,不同的组互不相⼲; ORDER BY:排序⼦句,表⽰分组后,组内的排序⽅式; ROWS/RANGE:窗⼝⼦句,是在分组(PARTITION BY)后,组内的⼦分组(也称窗⼝),此时分析函数的计算范围窗⼝,⽽不是PARTITON。

窗⼝有两种,ROWS和RANGE; 使⽤形式如下:OVER(PARTITION BY xxx PORDER BY yyy ROWS BETWEEN rowStart AND rowEnd) 注:窗⼝⼦句在这⾥我只说rows⽅式的窗⼝,range⽅式和滑动窗⼝也不提。

⼆、OVER() 函数 1、sql 查询语句的 order by 和 OVER() 函数中的 ORDER BY 的执⾏顺序 分析函数是在整个sql查询结束后(sql语句中的order by的执⾏⽐较特殊)再进⾏的操作, 也就是说sql语句中的order by也会影响分析函数的执⾏结果: [1] 两者⼀致:如果sql语句中的order by满⾜分析函数分析时要求的排序,那么sql语句中的排序将先执⾏,分析函数在分析时就不必再排序; [2] 两者不⼀致:如果sql语句中的order by不满⾜分析函数分析时要求的排序,那么sql语句中的排序将最后在分析函数分析结束后执⾏排序。

2、分析函数中的分组/排序/窗⼝分析函数包含三个分析⼦句:分组(partition by),排序(order by),窗⼝(rows/range)窗⼝就是分析函数分析时要处理的数据范围,就拿sum来说,它是sum窗⼝中的记录⽽不是整个分组中的记录,因此我们在想得到某个栏位的累计值时,我们需要把窗⼝指定到该分组中的第⼀⾏数据到当前⾏, 如果你指定该窗⼝从该分组中的第⼀⾏到最后⼀⾏,那么该组中的每⼀个sum值都会⼀样,即整个组的总和。

oracle中over函数用法

oracle中over函数用法(实用版)目录1.Oracle 中 over 函数的概述2.over 函数的基本语法与参数3.over 函数的使用场景与实例4.over 函数与其他分析函数的配合使用5.总结正文一、Oracle 中 over 函数的概述Oracle 中的 over 函数是一种分析函数,用于对查询结果进行分区和排序。

它可以让我们在查询成绩时,按照不同的条件对数据进行汇总和分析,从而得到更加精确和具体的结果。

二、over 函数的基本语法与参数over 函数的基本语法如下:```over(partition, by, expr2, order, by, expr3)```其中,各个参数的含义如下:- partition:用于对结果进行分区的条件,可以是一个表分区或者一个列;- by:指定分区的顺序,可以是升序(ASC)或降序(DESC);- expr2:指定分区内的排序条件,可以是一个列或者一个表达式;- order:指定排序的顺序,可以是升序(ASC)或降序(DESC);- by:指定排序的列名;- expr3:可选参数,用于指定在每个分区内需要计算的聚合函数,如 sum、avg、count 等。

三、over 函数的使用场景与实例over 函数通常与 rownumber()、rank() 和 denserank、lag() 和lead() 等分析函数配合使用,以实现更加复杂的查询需求。

以下是一些常见的使用场景与实例:1.按照班级统计每个班级的总分和平均分:```select over(partition, by, t.class) sum(t.score) astotal_score, over(partition, by, t.class) avg(t.score) as average_scorefrom tscore t, ts_student swhere t.student_id = s.idorder by s.class;```2.按照时间分区,统计每个时间段内的总销售额:```select to_char(order_date, "YYYY-MM-DD") as sales_date, over(partition, by, to_char(order_date, "YYYY-MM-DD"))sum(sales_amount) as total_salesfrom salesorder by order_date;```3.计算每个学生的成绩排名:```select student_id, over(partition, by, rank()) rank_score from (select student_id, score, rownumber() over(order by score) as rankfrom exams) t;```四、over 函数与其他分析函数的配合使用over 函数可以与其他分析函数相互配合,以实现更加复杂的数据分析需求。

Oracle分析函数sumover介绍

Oracle分析函数sumover介绍其中,sum over函数是一种常用的分析函数,它用于对指定列进行求和计算,并返回每一行的累计总和。

以下是sum over函数的基本语法:```SUM(expression) OVER (PARTITION BY col1 [, col2, ...] ORDER BY col3 [, col4, ...] [ROWS <frame specification>])```其中,expression是要进行求和的列或表达式,col1、col2等是用于分组的列,col3、col4等是用于排序的列,frame specification是用于定义计算总和的范围。

sum over函数的作用可以通过一个简单的示例来说明。

假设我们有一个包含销售订单的表,其中包含订单号、产品名称和销售量等列。

我们想要计算每个产品的累计销售量,可以使用sum over函数来实现:```sqlSELECT order_id, product_name, sales_quantity,SUM(sales_quantity) OVER (PARTITION BY product_name ORDER BYorder_id) AS cumulative_salesFROM sales_orders;```在上述示例中,我们使用了PARTITION BY子句来按照产品名称进行分组,然后使用ORDER BY子句按照订单号进行排序。

通过在SUM函数中使用over子句,我们可以计算每个产品的累计销售量,并将结果作为新的列返回。

除了基本的用法之外,sum over函数还可以与其他函数组合使用,进一步扩展其功能。

例如,我们可以使用sum over函数来计算百分比:```sqlSELECT order_id, product_name, sales_quantity,sales_quantity / SUM(sales_quantity) OVER (PARTITION BY product_name) * 100 AS percentageFROM sales_orders;```在上述示例中,我们使用SUM函数计算每个产品的总销售量,并将结果作为分母,然后将每个销售数量除以总销售量并乘以100,得到每个产品的销售百分比。

Oracle分析函数Over()

Oracle分析函数Over()阅读⽬录⼀、Over()分析函数1、rank()/dense_rank over(partition by ... order by ...)2、min()/max() over(partition by ...)3、lead()/lag() over(partition by ... order by ...) 取前⾯/后⾯第n⾏记录4、FIRST_VALUE/LAST_VALUE() OVER(PARTITION BY ...) 取⾸尾记录5、ROW_NUMBER() OVER(PARTITION BY.. ORDER BY ..) 排序(应⽤:分页)6、sum/avg/count() over(partition by ..)7、 rows/range between … preceding and … following 上下范围内求值rows between … preceding and … following⼆、其他1、NULLS FIRST/LAST 将空值字段记录放到最前或最后显⽰2、NTILE(n)3、keep(dense_rank first/last)回到顶部⼀、Over()分析函数说明:聚合函数(如sum()、max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回⼀⾏记录。

若想对于某组返回多⾏记录,则需要使⽤分析函数。

1、rank()/dense_rank over(partition by ... order by ...)说明:over()在什么条件之上; partition by 按哪个字段划分组; order by 按哪个字段排序;注意: (1)使⽤rank()/dense_rank() 时,必须要带order by否则⾮法 (2)rank()/dense_rank()分级的区别: rank(): 跳跃排序,如果有两个第⼀级时,接下来就是第三级。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档