oracle分析函数:一、窗口子句的使用
2016-07-07 16:25
573 查看
/[b]************************[/b]
*标题:分析函数analytic functions
*时间:2016-07-07
*作者:clark
[b]*************************[/b]/
分析函数:基于一组记录(行),计算聚合之的函数;
和集合函数的区别:
(1)对于每个分组,返回多个行,而不是一个行;
(2)分析的一组记录,称为窗口
(3)每一行,都有一个滑动的窗口;
(4)计算当前行的时候,窗口决定了完成这个计算的行的范围;
(5)在查询语句中,分析函数是最后的操作;即,它在where ,group by
order by ,having之后执行;
(6)因此,分析函数只能出现在select list或者 order by 语句中;
(7)分析函数一般用于计算累加,移动,集中或者报告总量
–analytic_function::=
analytic_function ( aruments ) over ( analytic_clause)
–analytic_clause::=
query_partition_clause order_by_clause windowing_clause
–注:表明分析函数作用的一个查询的结果集,它放在from,where group by,having字句之后
–query_partition_clause::=
partition by (expr)
–注:partition by 字句;根据一个或者多个expr将结果集(分析函数作用的一个查询的结果集)分割成组;
–order_by_clause::=
order siblings by (expr|position|c_alias) (asc|desc) nulls (first|last)
–注:order_by字句指定了一个数据分区中数据排序;
–(1)使用rank排列值得实惠,order by多个键值特别有用,第二个表达式可以解决第一个表达式相同的值
–注:order by a,b,c
–函数表现为:cume_dist,dense_rank,ntile,percent_rank,rank每一列返回相同的结果
–row_number分配没有给列一个不同的值;
–对于其他解析函数,结果以来窗口;(逻辑窗口,物理窗口)
/*===================================================
windows_clause:重点,难点
=====================================================*/
–windowing_clause::=
(rows|range) between (unbounded preceding|current row|value_expr preceding/following) and (unbounded following|current row|value_expr preceding/following)
(rows|range) (unbounded preceding|current row|value_expr preceding)
rows,指定窗口为物理行
range,指定窗口为逻辑的偏移量
–窗口的移动从上往下
–order by 返回的
–between and
指定窗口的开始点和结束点
–unbounded preceding:指定的窗口从第一个分区开始;是起点规范
–unbounded following:指定窗口结束在分区的最后一行,是终点规范
–value_expr preceding/following
current row
–注:指定了窗口开始在当前行;
value_expr preceding/following
–注:value_expr preceding开始,必须value_expr preceding结束;
–value_expr following 开始,必须value_expr following 结束;
rows value_expr preceding/following
–注:
value_expr 是物理偏移量,它必须是正确的数字或者表达式
value_expr是起点,必须是终点的前一行;
range value_expr preceding/following
–注:
–如果value_expr是数值,order by 必须是数值
–如果value_expr是区间值,order by 必须是日期数据类型
–如果忽略windows_clause;则窗口是unbounded preceding and current row;
/[b]************************[/b]
*标题:avg函数
*时间:2016-07-07
*作者:clark
[b]*************************[/b]/
–(1)聚合aggregate
select avg(out_row) from j1_dw.etl_exdw_log
–(2)分析例子
/*—————————————
****rows bwteen
(1)unbounded PRECEDING AND current row
(2)nbounded PRECEDING AND unbounded following
(3)无windows_clause 等同于nbounded PRECEDING AND unbounded following
(4)1 preceding and 1 following
—————————————–*/
–ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id, tjrq_q ORDER BY tjrq_q /ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING/) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
–rows BETWEEN unbounded PRECEDING AND current row
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id, tjrq_q ORDER BY tjrq_q rows BETWEEN unbounded PRECEDING AND current row) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
–rows BETWEEN unbounded PRECEDING AND unbounded following
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id,tjrq_q ORDER BY tjrq_q rows BETWEEN unbounded PRECEDING AND unbounded following) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
/*—————————————
** rows unbounded preceding|current row|value_expr preceding
—————————————–*/
–rows unbounded PRECEDING
–等同于rows BETWEEN unbounded PRECEDING AND current row
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id, tjrq_q ORDER BY tjrq_q rows unbounded PRECEDING) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
–rows 1 preceding
–当前行,和前一行做分析
–rows current row
–不做分析,和原值相同
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id, tjrq_q ORDER BY tjrq_q rows 1 preceding) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
*标题:分析函数analytic functions
*时间:2016-07-07
*作者:clark
[b]*************************[/b]/
分析函数:基于一组记录(行),计算聚合之的函数;
和集合函数的区别:
(1)对于每个分组,返回多个行,而不是一个行;
(2)分析的一组记录,称为窗口
(3)每一行,都有一个滑动的窗口;
(4)计算当前行的时候,窗口决定了完成这个计算的行的范围;
(5)在查询语句中,分析函数是最后的操作;即,它在where ,group by
order by ,having之后执行;
(6)因此,分析函数只能出现在select list或者 order by 语句中;
(7)分析函数一般用于计算累加,移动,集中或者报告总量
–analytic_function::=
analytic_function ( aruments ) over ( analytic_clause)
–analytic_clause::=
query_partition_clause order_by_clause windowing_clause
–注:表明分析函数作用的一个查询的结果集,它放在from,where group by,having字句之后
–query_partition_clause::=
partition by (expr)
–注:partition by 字句;根据一个或者多个expr将结果集(分析函数作用的一个查询的结果集)分割成组;
–order_by_clause::=
order siblings by (expr|position|c_alias) (asc|desc) nulls (first|last)
–注:order_by字句指定了一个数据分区中数据排序;
–(1)使用rank排列值得实惠,order by多个键值特别有用,第二个表达式可以解决第一个表达式相同的值
–注:order by a,b,c
–函数表现为:cume_dist,dense_rank,ntile,percent_rank,rank每一列返回相同的结果
–row_number分配没有给列一个不同的值;
–对于其他解析函数,结果以来窗口;(逻辑窗口,物理窗口)
/*===================================================
windows_clause:重点,难点
=====================================================*/
–windowing_clause::=
(rows|range) between (unbounded preceding|current row|value_expr preceding/following) and (unbounded following|current row|value_expr preceding/following)
(rows|range) (unbounded preceding|current row|value_expr preceding)
rows,指定窗口为物理行
range,指定窗口为逻辑的偏移量
–窗口的移动从上往下
–order by 返回的
–between and
指定窗口的开始点和结束点
–unbounded preceding:指定的窗口从第一个分区开始;是起点规范
–unbounded following:指定窗口结束在分区的最后一行,是终点规范
–value_expr preceding/following
current row
–注:指定了窗口开始在当前行;
value_expr preceding/following
–注:value_expr preceding开始,必须value_expr preceding结束;
–value_expr following 开始,必须value_expr following 结束;
rows value_expr preceding/following
–注:
value_expr 是物理偏移量,它必须是正确的数字或者表达式
value_expr是起点,必须是终点的前一行;
range value_expr preceding/following
–注:
–如果value_expr是数值,order by 必须是数值
–如果value_expr是区间值,order by 必须是日期数据类型
–如果忽略windows_clause;则窗口是unbounded preceding and current row;
/[b]************************[/b]
*标题:avg函数
*时间:2016-07-07
*作者:clark
[b]*************************[/b]/
–(1)聚合aggregate
select avg(out_row) from j1_dw.etl_exdw_log
–(2)分析例子
/*—————————————
****rows bwteen
(1)unbounded PRECEDING AND current row
(2)nbounded PRECEDING AND unbounded following
(3)无windows_clause 等同于nbounded PRECEDING AND unbounded following
(4)1 preceding and 1 following
—————————————–*/
–ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id, tjrq_q ORDER BY tjrq_q /ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING/) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
–rows BETWEEN unbounded PRECEDING AND current row
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id, tjrq_q ORDER BY tjrq_q rows BETWEEN unbounded PRECEDING AND current row) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
–rows BETWEEN unbounded PRECEDING AND unbounded following
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id,tjrq_q ORDER BY tjrq_q rows BETWEEN unbounded PRECEDING AND unbounded following) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
/*—————————————
** rows unbounded preceding|current row|value_expr preceding
—————————————–*/
–rows unbounded PRECEDING
–等同于rows BETWEEN unbounded PRECEDING AND current row
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id, tjrq_q ORDER BY tjrq_q rows unbounded PRECEDING) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
–rows 1 preceding
–当前行,和前一行做分析
–rows current row
–不做分析,和原值相同
SELECT unit_id,
unit_code,
tjrq_q,
out_row,
AVG(out_row) OVER(PARTITION BY unit_id, tjrq_q ORDER BY tjrq_q rows 1 preceding) AS c_mavg
FROM etl_exdw_log
ORDER BY unit_id, unit_code, tjrq_q, out_row
相关文章推荐
- oracle的sql优化-oracle的索引介绍原理浅析(B-Tree索引)
- oracle startup没有任何反应
- mysql和oracle数据库引擎介绍
- 基于vCenter/ESXi平台CentOS 6.8系统虚拟机Oracle 12c RAC双节点数据库集群搭建
- oracle select into 的时候提示未找到数据
- PL/SQL连接oracle时弹出空白框
- oracle创建索引后sqlldr导入错误
- oracle笔记
- Oracle中union函数
- Oracle 12C优化器的巨大变化,上生产必读(下)
- Oracle 查询类似 select top 的用法
- 自己编写了Oracle EBS程序自动移植脚本
- 12.Oracle存储过程
- MySql递归查询和Oracle递归查询
- MySql递归查询和Oracle递归查询
- oracle 常用函数
- Oracle 跨用户查看视图 权限的分配
- Oracle的光标还有函数
- Oracle 跨用户查看视图
- oracle 实现id自增