zoukankan      html  css  js  c++  java
  • Oracle SQL4-分析函数入门篇章

    本文为oracle SQL分析函数入门,如果对分析函数有一定了解,可跳过此文。

    另外,本文只是给出了部分分析函数的简单使用案例,未做具体说明。具体使用方法请自行调查。

    create table SALE_FACT
    (
      PRODUCT VARCHAR2(10),
      COUNTRY VARCHAR2(10),
      YEAR    VARCHAR2(10),
      WEEK    VARCHAR2(10),
      SALE    NUMBER
    );
    commit;
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('001', 'china', '2017', '01', 100);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('001', 'china', '2017', '02', 200);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('001', 'china', '2017', '03', 300);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('001', 'china', '2016', '01', 100);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('001', 'china', '2016', '02', 200);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('001', 'china', '2016', '03', 300);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('002', 'japan', '2017', '01', 100);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('002', 'japan', '2017', '02', 200);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('002', 'japan', '2017', '03', 300);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('002', 'japan', '2016', '01', 100);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('002', 'japan', '2016', '02', 200);
    insert into SALE_FACT (PRODUCT, COUNTRY, YEAR, WEEK, SALE)
    values ('002', 'japan', '2016', '03', 300);
    commit;
    数据脚本1
    select s.product,
           s.country,
           s.year,
           s.week,
           sum(s.sale) over(partition by s.product, s.country, s.year order by s.week 
             rows between unbounded preceding and current row) as running_sum
      from sale_fact s;
    
    select s.product,
           s.country,
           s.year,
           s.week,
           max(s.sale) over(partition by s.product, s.country, s.year order by week 
             rows between unbounded preceding and unbounded following) as max_sal
      from sale_fact s;
    
    select s.product,
           s.country,
           s.year,
           s.week,
           max(s.sale) over(partition by s.product, s.country, s.year order by week 
             rows between 1 preceding and 1 following) as max_sal
      from sale_fact s;
    
    select s.product,
           s.year,
           s.week,
           s.country,
           s.sale,
           lag(s.sale, 2, null) over(partition by s.product, s.country 
             order by s.year, s.week) as prior_sale
      from sale_fact s;
    
    select s.product,
           s.year,
           s.week,
           s.country,
           s.sale,
           first_value(s.sale) over(partition by s.product, s.country,year 
             order by s.sale desc) as max_sale
      from sale_fact s;
    
    select s.product,
           s.year,
           s.week,
           s.country,
           s.sale,
           nth_value(s.sale,2) over(partition by s.product, s.country,year 
             order by s.sale desc 
             rows between unbounded preceding and unbounded following) as max_sale
      from sale_fact s;
    
    select t.year,t.week,t.top_sale_year,
    lag(t.top_sale_year) over(order by year asc) from 
    (select distinct 
      first_value(s.year) over(partition by s.product, s.country, s.year 
        order by s.sale desc rows between unbounded preceding and unbounded following) as year,
      first_value(s.week) over(partition by s.product,s.country,s.year
        order by s.sale desc rows between unbounded preceding and unbounded following) as week,
      first_value(s.sale) over(partition by s.product,s.country,s.year
        order by s.sale desc rows between unbounded preceding and unbounded following) as top_sale_year
      from sale_fact s) t;
    create table ORDERS
    (
      CUSTOMER_ID VARCHAR2(10),
      ORDER_ID    VARCHAR2(10),
      ORDER_DATE  DATE
    );
    commit;
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('001', 'P01', to_date('07-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('001', 'P02', to_date('04-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('001', 'P03', to_date('26-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('001', 'P04', to_date('17-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('002', 'P01', to_date('27-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('002', 'P02', to_date('18-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('002', 'P03', to_date('09-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('003', 'P01', to_date('05-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('003', 'P02', to_date('19-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('003', 'P03', to_date('11-07-2017', 'dd-mm-yyyy'));
    insert into ORDERS (CUSTOMER_ID, ORDER_ID, ORDER_DATE)
    values ('004', 'P01', to_date('19-07-2017', 'dd-mm-yyyy'));
    commit;
    数据脚本2
    select t.customer_id, avg(t.order_date - t.prev_order_date) as avg_days_between from 
    (select o.customer_id,
           o.order_date,
           lag(o.order_date, 1, order_date) 
           over(partition by o.customer_id order by o.order_date desc) as prev_order_date
      from orders o) t
      group by t.customer_id
  • 相关阅读:
    js调用后台方法
    Js 实现trim方法
    Service获取客户端IP地址(java)
    ASP.NET中页面传值
    Asp.net 实现选择文件批量下载
    js调用后台代码
    获取webservice客户端IP地址 (C# java )
    使 WebBrowser 更简单的新加和执行 js, 可安装 jQuery 脚本的 C# 开源代码 IEBrowse...
    Mac下各种网络命令的使用
    Java关键字
  • 原文地址:https://www.cnblogs.com/aaron-song/p/7239567.html
Copyright © 2011-2022 走看看