Oracle窗口函数基础知识学习

Oracle为这种情况提供了一个子句:rows between … preceding and … following。从字面上猜测它的意思是:在XXX之前和XXX之后

1,测试环境:
sql> create table win_order(
    month number(2),
    total_sales number);

 2,输入数据:
insert into win_order values(1,623141);
insert into win_order values(2,423124);
insert into win_order values(3,323214);
insert into win_order values(4,212314);
insert into win_order values(5,654314);
insert into win_order values(6,122134);
insert into win_order values(7,859234);
insert into win_order values(8,752314);
insert into win_order values(9,365314);
insert into win_order values(10,265314);
insert into win_order values(11,563114);
insert into win_order values(12,595314);

 3,测试语句:

      我们前面使用了sum(sum(sal)) over (partition by deptno) 来统计每个部门的总额。现在我们要统计的不单是每个部门,而是所有分区,partition by region_id在这里不起作用了。

Oracle为这种情况提供了一个子句:rows between … preceding and … following。从字面上猜测它的意思是:在XXX之前和XXX之后的所有记录,实际情况如何让我们通过示例来验证:

SQL> select month,
            sum(total_sales) month_sales,
            sum(sum(total_sales))over (order by month
            rows between unbounded preceding and unbounded following) total_sale
        from win_order group by month;
 
MONTH MONTH_SALES TOTAL_SALE
—– ———– ———-
    1      623141    5758845
    2      423124    5758845
    3      323214    5758845
    4      212314    5758845
    5      654314    5758845
    6      122134    5758845
    7      859234    5758845
    8      752314    5758845
    9      365314    5758845
  10      265314    5758845
  11      563114    5758845
  12      595314    5758845
 
12 rows selected

高亮处的代码在这里发挥了关键作用,,它告诉oracle统计从第一条记录开始至最后一条记录的每月销售额。这个统计在记录集形成的过程中执行了12次,这时相当费时的!但至少我们解决了问题。

    unbounded preceding and unbouned following的意思针对当前所有记录的前一条、后一条记录,也就是表中的所有记录。那么假如我们直接指定从第一条记录开始直至末尾呢?看看下面的结果:

SQL> select month,
              sum(total_sales) month_sales,
              sum(sum(total_sales))over (order by month
              rows between 1 preceding and unbounded following) total_sale
          from win_order group by month ;

MONTH MONTH_SALES TOTAL_SALE
—– ———– ———-
    1      623141    5758845
    2      423124    5758845
    3      323214    5135704
    4      212314    4712580
    5      654314    4389366
    6      122134    4177052
    7      859234    3522738
    8      752314    3400604
    9      365314    2541370
  10      265314    1789056
  11      563114    1423742
  12      595314    1158428
 
12 rows selected
    很明显这个语句错了。实际1在这里不是从第1条记录开始的意思,而是指当前记录的前一条记录。preceding前面的修饰符是告诉窗口函数执行时参考的记录数,如同unbounded就是告诉oracle不管当前记录是第几条,只要前面有多少条记录,都列入统计的范围。

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1902522.html

(0)
上一篇 2025年2月22日 15:07:50
下一篇 2025年2月22日 15:08:04

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Oracle 函数中游标及递归的应用

    在代码中使用递归可能大部分程序员都不陌生,但是在存储过程或者函数中写个递归估计就不多见了。今天遇到了一个在Oracle函数中使 在代码中使用递归可能大部分程序员都不陌生,但是在存储过程或者函数中写个递归估计就不多见了。 今天遇到了一个在Or…

    数据库 2025年2月23日
    100
  • Oracle数据库实用函数

    Oracle实用函数 decode 语法如下: decode(value, if1, then1, if2,then2,if3,then3, . . . else ) Value 代表某个表的任何类 Oracle实用函数 decode 语法…

    数据库 2025年2月23日
    100
  • Oracle函数-高阶篇

    下面整理了部分Oracle函数-高阶篇: 1、 CATSTR 举例:SELECT CATSTR(COLUMN_NAME) NAME_LIST FROM DBA_TAB_COLUMNS WHERE TR 下面整理了部分oracle函数-高阶篇…

    数据库 2025年2月23日
    100
  • Oracle空值处理函数

    /************Oracle中NUL、NVL2 和NULLIF的用法***************/ NULL指的是空值,或者非法值。 1、NVL(expr1, expr2)函数 expr /************oracle中…

    数据库 2025年2月23日
    100
  • Oracle函数 通过秒数或分钟数获取时间段

    一同事叫帮忙写个函数,通过输入分钟数或秒数,获取一个时间段,尽管很简单,也还是贴出来一备需要的时候,直接拿来用: create 一同事叫帮忙写个函数,通过输入分钟数或秒数,获取一个时间段,,尽管很简单,也还是贴出来一备需要的时候,直接拿来用…

    数据库 2025年2月22日
    100
  • Oracle 函数 与 存储过程 的应用

    Oracle 函数 与 存储过程 的应用,Oracle 提供了许多 安全机制 便于控制函数 和存储过程的访问权限, 也使得 函数 和 存储过程 具 函数 与 存储过程    Oracle 数据库中不仅可以使用 单条语句对数据库进行增、删、改…

    数据库 2025年2月22日
    100
  • Oracle to_date()函数的用法

    在Oracle数据库中,Oracle to_date()函数是我们经常使用的函数,下面就为您详细介绍Oracle to_date()函数的用法,希望可以对您有 在Oracle数据库中,,Oracle to_date()函数是我们经常使用的函…

    数据库 2025年2月22日
    100
  • Oracle 常用字符函数之Translate

    Oracle 常用字符函数之Translate,返回将出现在from中的每个字符替换为to中相应字符,若from比to字符串长,那么在from中比to多出 语法:TRANSLATE(char,from,to) 用法:返回将出现在from中的…

    数据库 2025年2月22日
    100
  • Oracle分析函数基本概念和语法总结

    分析函数基于一个行集计算聚集值,和聚合函数不同的地方在于分析函数会返回多行。除了最后的order by子句,分析函数是一个查询中 Analytic functions compute an aggregate value based on …

    数据库 2025年2月22日
    100
  • Oracle Decode函数详解

    DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能 select a.ok 合格情况,sum(decode(cname, ‘计…

    数据库 2025年2月22日
    100

发表回复

登录后才能评论