`
datamachine
  • 浏览: 163379 次
社区版块
存档分类
最新评论

简化SQL式计算之行间计算

阅读更多

在数据库应用开发中,我们经常需要面对复杂的SQL式计算,行间计算就是其中一种,比如用每月的销售额除以上月的销售额,求比上期,或用每月销售额除以去年同月的销售额,求同期比。有些数据库没有提供SQL2003标准的窗口函数(或支持的不完备),完成行间计算就需要更换思路使用连接(join)运算替代,不仅难以理解而且运算效率低下。即使可以使用窗口函数仍要面临嵌套子查询等问题,SQL语句仍较为冗长。而使用集算器可以用更简单直观的代码来实现行间计算,下面用一个例子来说明。

 

         sales存储着多年的订单数据,请根据该表计算出指定时间段内各月份的销售额比上期和同期比。部分源数据如下:


 

         集算器代码:



 

         A1:按时间段从数据库查询数据,beginend是外部参数,比如begin="2011-01-01 00:00:00"end="2014-07-08 00:00:00"。部分查询结果如下:



 

         A2=A1.groups(year(OrderDate):y,month(OrderDate):m; sum(Amount):mAmount)

 

         这句代码对订单按照年份和月份进行分组,并汇总求得每月的销售额。函数groups可进行分组汇总运算,其参数分为两部分,分号之前是分组表达式,即:year(OrderDate):y,month(OrderDate):m,分号之后是汇总表达式,即sum(Amount):mAmount。汇总后的字段命名为mAmount。部分计算结果如下:



 

         A3=A2.derive(mAmount/mAmount[-1]:lrr)

 

         这句代码在A2基础上增加一个新的字段lrr,即按月比上期,其表达式为mAmount/mAmount[-1]。集算器可以用 [N][-N]来表达相对于当前记录之后的第N条记录,或之前的第N条记录,因此代码中mAmount代表当期销售额,mAmount[-1]代表上期销售额。计算结果如下:



 

         需要注意的是,初始月份的比上期值为空(即20111月)。

         A4=A3.sort(m)

 

         这句代码将A3按照月、年排序,以便计算同期比。完整的代码应当是:=A3.sort(m,y),由于A3本来就是按年排序的,因此只需按月排序就可以达到目的,即A3.sort(m),这样性能也高。部分计算结果如下:

 

         A5=A4.derive(if(m==m[-1],mAmount/mAmount[-1],null):yoy)

 

         这句代码在A4的基础上增加一个新的字段yoy,即月销售额的同期比,其表达式为if(m==m[-1],mAmount/mAmount[-1],null),这表示月份相同时才进行同期比计算。函数if有三个参数,其中m==m[1-]为布尔表达式,当该条件为True时,返回mAmount/mAmount[-1],当该条件为False时,返回null需要注意的是,初始年份(即2011年)各月份的同期比衡为空。部分结果如下:



 

         如果观察不便,可以加一行代码A6=A5.sort(y:-1,m),即将A5按照年逆序月正序进行排序。需要注意的是,数据只到20147月为止。结果如下:



 

另外,集算器可被报表工具或java程序调用,调用的方法也和普通数据库相似,使用它提供的JDBC接口即可向java主程序返回ResultSet形式的计算结果,具体方法可参考相关文档。

 

  • 大小: 91.7 KB
  • 大小: 63.9 KB
  • 大小: 44 KB
  • 大小: 30.4 KB
  • 大小: 44.3 KB
  • 大小: 32.1 KB
  • 大小: 46 KB
  • 大小: 61.3 KB
1
1
分享到:
评论

相关推荐

    Oracle中使用SQL MODEL定义行间计算.pdf

    ### Oracle中使用SQL MODEL定义行间计算 #### 概述 在Oracle数据库10g中,`MODEL`子句提供了一种强大而灵活的方法来执行行间计算,它允许用户根据查询结果定义多维数组,并将规则应用于这些数组以计算新值。与传统...

    sqlserver根据经纬计算距离的函数

    ### SQL Server 中基于经纬度计算两点间距离的自定义函数 在SQL Server中,通过创建一个自定义函数来实现根据两个地理位置的经纬度计算两点之间的距离是非常实用的功能。本篇文章将详细介绍如何创建这样一个函数,...

    易语言利用SQL语句实现超级列表框 带合计行

    本主题聚焦于如何利用SQL语句在易语言环境中为超级列表框添加合计行,这是一项能显著提高代码效率和易读性的技巧。 超级列表框是GUI(图形用户界面)设计中常见的一种组件,它允许用户以表格形式展示和操作数据,...

    使用sql server 系统表简化您的操作

    ### 使用SQL Server系统表简化您的操作 在SQL Server中,系统表是数据库管理系统用来存储有关数据库内部结构的信息的重要工具。这些系统表可以帮助我们更高效地管理数据库中的对象,例如查看库中所有用户表、找出库...

    SQL---行转列 详细描述

    从SQL Server 2005开始,引入了新的函数`PIVOT`来简化行转列的操作,使得过程更为直观且简洁。 1. **构造PIVOT子句**:指定用于转换的字段以及对应的聚合函数。 2. **执行PIVOT查询**:将构造好的PIVOT子句嵌入到...

    Oracle9i的简化SQL语法

    在这个版本中,Oracle引入了简化SQL语法,旨在让数据库管理员和开发人员能更方便地进行数据查询、插入、更新和删除等操作。 一、SQL*Plus命令行增强 在Oracle9i中,SQL*Plus界面得到了强化,提供了更多方便用户的...

    sql确定两个日期之间的月份数或年数

    通过上述不同数据库系统中的示例可以看出,虽然不同的数据库提供了不同的内置函数来简化计算过程,但其核心思想都是相同的:即先找到两个日期,然后根据这两个日期计算出它们之间的年数和月数差异。在实际应用中,...

    基于BlinkSQL阿里实时计算平台.pdf

    - **ANSI SQL支持**:通过BlinkSQL,阿里巴巴能够在实时计算场景中使用标准化的SQL语言,简化了开发流程并提高了查询效率。 ##### 5. SQL的重要性 - **实时查询需求**:文档强调了SQL在实时计算中的重要性,特别是...

    基于SQL通用数据计算工具的设计与实现.pdf

    综上所述,该文档介绍了针对信息系统中数据计算需求,基于SQL语言设计并实现了一种通用数据计算工具,旨在提高计算效率,简化用户操作,以及增强对复杂数据关系的处理能力。该工具通过用户自定义计算公式的方式,...

    在SQL Server 2005里更简单地计算中值.pdf

    在SQL Server 2000中,计算中值的解决方案较为复杂,而到了SQL Server 2005,引入的新T-SQL功能简化了这一计算过程。具体来说,在SQL Server 2005中,可以使用PERCENTILE_CONT等窗口函数来直接求得中值,无需复杂的...

    sqlserver数据统计一

    在SQL Server中,我们可以使用Transact-SQL(T-SQL)编写源代码来执行数据统计任务,例如使用GROUP BY语句进行分组统计,使用COUNT、SUM、AVG、MAX、MIN等聚合函数对数据进行计算。此外,可能还会提及SQL Server ...

    基于flink-sql的实时流计算web平台

    Flink SQL是Flink项目为简化流处理和批处理而引入的一种SQL接口,使得开发者能够以更加直观、易于理解的方式来编写数据处理逻辑。本文将深入探讨基于Flink-SQL构建的实时流计算Web平台的关键技术和应用场景。 一、...

    阿里云流计算FlinkSQL核心功能解密.pptx

    总的来说,阿里云流计算Flink SQL通过StreamCompute 2.0平台提供了一种高效、易用的实时数据分析解决方案,不仅简化了流处理的复杂性,也提升了数据分析的时效性和准确性。这使得企业和开发者能够更好地应对大数据...

    SQL基础、中级SQL、高级SQL_手册

    在高级SQL部分,将深入探讨窗口函数(Window Functions),这些函数如RANK、ROW_NUMBER和LEAD/LAG,可以实现按行排序和计算移动平均等复杂分析。另外,会涉及存储过程和触发器,它们是预编译的SQL代码块,可以提高...

    SQLServer实用SQL语句大全

    在SQL Server数据库管理系统中,SQL(Structured Query Language)是用于管理关系数据库的主要工具。这个"SQLServer实用SQL语句大全"资源很可能包含了广泛且深入的SQL语法和实用技巧,适用于数据库设计、数据查询、...

    SQL Server教程涵盖了从基础概念到高级功能的广泛内容 以下是一个简化的SQL Server教程概要,旨在帮助初学者快速入

    以下是一个简化的SQL Server教程概要,旨在帮助初学者快速入门并理解SQL Server的基本操作。 一、SQL Server基础 1. SQL Server简介 定义:SQL Server是Microsoft开发设计的一个关系数据库智能管理系统(RDBMS),...

    SQL CLR聚合函数在环境质量业务数据计算中的应用.pdf

    总结来说,SQL CLR聚合函数为处理复杂的环境质量数据提供了一种高效的解决方案,通过将.NET框架的计算能力与SQL Server的数据库功能相结合,不仅提高了数据处理的灵活性和性能,还大大简化了业务数据处理过程,为...

    SQL脚本函数 36进制转换为10进制

    根据给定的信息,本文将详细解释“SQL脚本函数 36进制转换为10进制”的实现原理与具体步骤。此SQL脚本函数的主要功能是将36进制数值转换为十进制数值。 ### 一、理解36进制 在计算机科学中,我们通常使用的是十...

    T-SQL性能调优秘笈 基于SQL Server 2012窗口函数_PDF电子书

    - **窗口函数概述**:窗口函数(Window Function)是在SQL Server中处理复杂查询的一种强大工具,它可以用来执行分组内的计算,如排名、行号、累计总和等操作。 - **常见的窗口函数**: - `ROW_NUMBER()`:为每一行...

Global site tag (gtag.js) - Google Analytics