`
dabing013
  • 浏览: 40737 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle函数系列-SUM() OVER()做数据累计

阅读更多

   昨晚SP跑完之后,发现部分数据有问题,看了下过程,是在做数据累计时出现的问题。于是在网上找到了一种好方法,以下简要说明:

 比如多个工厂(comp),每个工厂每天有多条流水线(line)进行生产,现在按工厂及日期(crtdate)进行统计生产数量(qty),并对数量按工厂及日期进行累计

 原表查询信息

SELECT COMP, CREDATE, LINE, QTY FROM PRO_LOG ORDER BY COMP, CREDATE;

  结果:

 

COMP  CRTDATE  LINE QTY
-----   --------------  ---- ----
 SSS  2008-01-01  1  4
                     
 SSS  2008-01-02  1  4
                     
 SSS  2008-01-03  1  4
                     
 SSS  2008-01-03  2  4
                     
 TTT  2008-01-01  1  1
                     
 TTT  2008-01-01  2  2
                     
 TTT  2008-01-02  1  3
                     
 XXX 2008-01-01  5  9
                     
 XXX 2008-02-01  1  7

 9 rows selected 
 

 

一、当不需要对生产数量(qty)按工厂及日期进行累计时,可以简单的用group by处理

     查询SQL:

SELECT COMP, CREDATE, SUM(QTY) FROM PRO_LOG ORDER BY COMP, CREDATE;

      结果:

COMP CRTDATE QTY
-----  -----------  -----
 SSS  2008-01-01 4
                 
 SSS  2008-01-02 4
                 
 SSS  2008-01-03 8
                 
 TTT  2008-01-01 3
                 
 TTT  2008-01-02 3
                 
 XXX  2008-01-01 9
                 
 XXX  2008-02-01 7

 7 rows selected 

 

 

 二、当需要对生产数量(qty)按工厂及日期(月为单位)进行累计时,可以使用SUM() OVER()

      查询SQL:

SELECT COMP,
       CRTDATE,
       QTY,
       SUM(QTY) OVER(PARTITION BY COMP, TO_CHAR(CRTDATE, 'YYYYMM') ORDER BY COMP, CRTDATE) TOTAL
  FROM (SELECT COMP, CRTDATE, SUM(QTY) QTY
            FROM PRO_LOG
            GROUP BY COMP, CRTDATE) T;
 /*TO_CHAR(CRTDATE, 'YYYYMM')  以月为单位,故做此处理*/

     结果:

COMP CRTDATE QTY TOTAL
 ------- ----------- ------- -----
 
 SSS  2008-01-01  4  4
                  
 SSS  2008-01-02  4  8
                  
 SSS  2008-01-03  8  16
                  
 TTT  2008-01-01  3  3
                  
 TTT  2008-01-02  3  6
                  
 XXX  2008-01-01  9  9
                  
 XXX  2008-02-01  7  7
  
 
 7 rows selected
 

 

分享到:
评论

相关推荐

    oracle函数介绍(6) 著名函数之分析函数.doc

    Oracle函数在数据库查询和数据分析中扮演着至关重要的角色,尤其是一些著名的分析函数,它们能够帮助我们进行复杂的统计计算和数据处理。在本篇中,我们将深入探讨几个关键的分析函数,包括AVG、SUM、COUNT、FIRST_...

    Oracle分析函数实践 - blog.docx

    - `SUM() OVER`: 对指定列求和,可以结合`PARTITION BY`对每个分区求和,也可以在整个数据集上求和。 - `COUNT() OVER`: 计算指定列的行数,同样可以应用于分区或整个数据集。 - `AVG() OVER`: 计算平均值,同样可以...

    Oracle开发的over函数

    - **开窗(windowing)函数**:用于计算不同的累计值,如SUM、COUNT、AVG等,作用于数据的一个窗口上。 - **制表(reporting)函数**:与开窗函数同名,但作用于一个分区或一组上的所有列,不依赖于排序。 - **LAG、...

    ORACLE分析函数

    根据提供的文件信息,我们可以深入探讨Oracle分析函数的相关知识点,特别是`SUM()`函数配合`OVER`子句的不同用法,以及`RANK()`, `DENSE_RANK()`, 和 `ROW_NUMBER()` 这三个窗口函数的应用场景。 ### Oracle分析...

    oracle分析函数over_及开窗函数.txt

    通过以上示例可以看出,Oracle中的`OVER`子句和开窗函数是非常强大的工具,可以用来解决许多复杂的数据分析问题。正确理解和运用这些函数,能够极大地提高数据处理效率和灵活性。在实际应用中,可以根据具体需求灵活...

    oracle数据仓库分析函数汇总

    本资源“oracle数据仓库分析函数汇总”聚焦于Oracle数据库中的分析函数,尤其是与`OVER()`子句相关的应用,这是一系列功能强大的SQL工具,用于处理窗口或分组数据。 首先,`OVER()`子句允许在单个SQL查询中定义一个...

    ORACLE_OVER函数

    通过以上示例可以看出,Oracle的OVER函数提供了强大的数据处理能力,可以帮助我们在SQL查询中直接完成复杂的业务逻辑运算。无论是简单的排名计算还是复杂的累积分析,OVER函数都能提供高效的解决方案。掌握这些功能...

    Oracle中的SUM用法讲解

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的SQL功能,包括聚合函数SUM。SUM函数用于对指定列的数据进行求和,常用于统计分析。在Oracle中,SUM函数可以结合CASE WHEN语句,使得条件求和变得...

    oracle分析函数文档

    这种灵活性使得Oracle分析函数在处理复杂的数据集时非常有用,尤其是在需要进行高级数据分析或报表生成时。 #### 二、分析函数与聚合函数的区别 在理解Oracle分析函数之前,首先需要了解它与传统的聚合函数(如SUM...

    Oracle函数大全.pdf

    - **连续求和分析函数sum()over**: 计算窗口内值的总和。 - **排序值分析函数RANK()和dense_rank()**: 返回行在结果集中的排名。 - **排序后顺序号分析函数ROW_NUMBER()**: 返回行在结果集中的顺序号。 - **取上下行...

    ORACLE分析函数教程

    Oracle分析函数是在处理大量数据时极为有用的一套工具,主要用于在线分析处理(OLAP)场景。这类函数可以在多个级别上进行数据聚合,并支持复杂的排序、分组以及过滤操作。与传统的SQL函数不同,分析函数可以在查询...

    Oracle分析函数教程

    了解并熟练掌握Oracle分析函数,对于数据库管理员、数据分析师以及任何需要处理复杂数据查询的IT专业人员来说,都是至关重要的技能。通过实例练习和参考书籍,如Tom Kyte的《expert one-on-one》和Oracle官方文档,...

    Oracle_分析函数

    Oracle分析函数是Oracle数据库提供的一个高级SQL特性,它允许在查询结果集中进行复杂的数据分析。分析函数通过使用OVER子句,可以对数据进行分区、排序以及定义窗口大小等功能。它们在数据仓库、报告和在线事务处理...

    oracle 常用函数下载

    Oracle数据库中的常用函数是数据库管理员和开发人员在处理数据时不可或缺的工具。这些函数极大地提高了数据处理的效率和灵活性。以下是一些常见的Oracle分析函数及其用法: 1. **开窗函数(Over)**: 开窗函数允许...

    oracle的分析函数over 及开窗函数

    ### Oracle的分析函数OVER及开窗函数 #### 一、分析函数OVER ...通过上述示例可以看出,Oracle的分析函数`OVER`及其开窗函数提供了强大的数据分析能力,能够帮助我们轻松完成复杂的业务需求分析。

    oracle分析函数.doc

    Oracle分析函数是数据库管理系统Oracle中一组强大的工具,用于处理集合数据,特别是在复杂的报表和数据分析场景中。它们允许用户在单个SQL查询中执行聚合操作,同时保持行的原始顺序,这是传统的GROUP BY函数无法...

    Oracle函数及常用sql

    以上只是Oracle函数和SQL查询的一小部分,实际应用中还有更多高级特性和技巧,如索引、存储过程、触发器、视图等。通过深入学习和实践,可以充分利用Oracle的强大功能,高效地管理数据并解决复杂问题。

    oracle分析函数及开窗函数

    假设有一个表`sales`,包含`date`和`saler`两个字段,我们可以使用`SUM()`函数配合`OVER`子句来计算每天的累计营业额。 ```sql SELECT date, saler, SUM(saler) OVER (ORDER BY date) AS cumulative_sales FROM ...

    oracle最全函数大全

    此外,Oracle 还提供了一系列其他有用的函数,如条件判断函数`CASE`、随机数生成函数`DBMS_RANDOM.RANDOM`等。 ### 总结 通过本文的介绍,我们了解了 Oracle 数据库中不同类型的函数及其用途。分析函数特别适合...

Global site tag (gtag.js) - Google Analytics