当前位置:数据库 > Oracle >>

[Oracle]分析函数详述

[Oracle]分析函数详述
 
分析函数概述
Oracle中的分析函数和聚合函数相似,但是对于每一组记录,无论多少行,聚合函数只返回一行值,而分析函数对其中每一行记录都返回值。这一组记录,称为分析函数的一个(WINDOW),窗口决定了要处理数据的范围,该范围在物理上可以由指定的行数来确定,或者在逻辑上由相对偏移量来确定。分析函数总是在除了ORDER BY之外的其他子句运算后才执行的,所以它不能出现在where、group by等子句中,只能出现在select列表和order by子句中。
 
准备测试数据
在SCOTT用户下执行如下语句,创建测试表和测试数据:
[sql] 
create table lw_sales(dept_id varchar2(6), sale_date date, goods_type varchar2(4), sale_cnt number(10));  
COMMENT ON TABLE LW_SALES IS '销售数据测试表。'  
/  
SET DEFINE OFF;  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S00', TO_DATE('03/16/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G00', 400);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S02', TO_DATE('04/05/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G00', 400);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('03/17/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G00', 700);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('04/13/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G00', 900);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S00', TO_DATE('04/18/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G01', 300);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S00', TO_DATE('03/15/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G01', 30);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('04/15/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G01', 400);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S02', TO_DATE('03/10/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G01', 200);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S02', TO_DATE('03/06/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G01', 70);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('03/17/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G01', 400);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('04/07/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G02', 300);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('03/14/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G02', 300);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S02', TO_DATE('03/09/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G02', 900);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('03/16/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G02', 800);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S02', TO_DATE('04/22/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G03', 300);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S00', TO_DATE('03/21/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G03', 200);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('03/17/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G03', 600);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S02', TO_DATE('04/05/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G03', 800);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('04/03/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G03', 200);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S00', TO_DATE('03/06/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G03', 800);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('03/09/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G04', 800);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('03/07/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G04', 30);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('04/20/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G04', 900);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S01', TO_DATE('03/21/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G04', 800);  
Insert into LW_SALES  
   (DEPT_ID, SALE_DATE, GOODS_TYPE, SALE_CNT)  
 Values  
   ('S00', TO_DATE('03/02/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'G04', 500);  
Insert i
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,