目录:
===============================================
1.Oracle分析函数简介
2. Oracle分析函数简单实例
3.分析函数OVER解析

二、Oracle分析函数简单实例:

下面我们通过一个实际的例子:按区域查找上一年度订单总额占区域订单总额20%以上的客户,来看看分析函数的应用。

【1】测试环境:

SQL> desc orders_tmp;
 Name                          
Null?    Type
 
----------------------- -------- ----------------
 CUST_NBR                    NOT NULL NUMBER(5)
 REGION_ID                  
NOT NULL NUMBER(5)
 SALESPERSON_ID      
NOT NULL NUMBER(5)
 
YEAR                              NOT NULL NUMBER(4)
 
MONTH                         NOT NULL NUMBER(2)
 TOT_ORDERS              
NOT NULL NUMBER(7)
 TOT_SALES                
NOT NULL NUMBER(11,2)


【2】测试数据:

SQL> select * from orders_tmp;

  CUST_NBR  REGION_ID SALESPERSON_ID       
YEAR      MONTH TOT_ORDERS  TOT_SALES
---------- ---------- -------------- ---------- ---------- ---------- ----------
        11          7             11                       2001          7          2      12204
         
4          5              4                         2001         10         2      37802
         
7          6              7                         2001          2          3       3750
        
10          6              8                        2001          1          2      21691
        
10          6              7                        2001          2          3      42624
        
15          7             12                       2000          5          6         24
        
12          7              9                        2000          6          2      50658
         
1          5              2                         2000          3          2      44494
         
1          5              1                         2000          9          2      74864
         
2          5              4                         2000          3          2      35060
         
2          5              4                         2000          4          4       6454
         
2          5              1                         2000         10          4      35580
         
4          5              4                         2000         12          2      39190

13 rows selected.

【3】测试语句:
SQL> select o.cust_nbr customer,
  
2         o.region_id region,
  
3         sum(o.tot_sales) cust_sales,
  
4         sum(sum(o.tot_sales)) over(partition by o.region_id) region_sales
  
5    from orders_tmp o
  
6   where o.year = 2001
  
7   group by o.region_id, o.cust_nbr;

  CUSTOMER     REGION CUST_SALES REGION_SALES
---------- ---------- ---------- ------------
         4              5      37802        37802
         
7              6       3750         68065
        
10             6      64315        68065
        
11             7      12204        12204

SQL> select *
  
2    from (select o.cust_nbr customer,
  
3                 o.region_id region,
  
4                 sum(o.tot_sales) cust_sales,
  
5                 sum(sum(o.tot_sales)) over(partition by o.region_id) region_sales
  
6            from orders_tmp o
  
7           where o.year = 2001
  
8           group by o.region_id, o.cust_nbr) all_sales
  
9   where all_sales.cust_sales > all_sales.region_sales * 0.2;

  CUSTOMER     REGION CUST_SALES REGION_SALES
---------- ---------- ---------- ------------
         4          5      37802        37802
        
10          6      64315        68065
        
11          7      12204        12204

SQL
> 

相关文章: