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

简化SQL式计算之各组前N行

    博客分类:
  • DB
阅读更多

取出各组的前N行数据是较常见的运算,比如:每位员工涨薪最多的一次是哪次;高尔夫成绩最差的三次是哪三次;每个月,每种产品销量最高的五天是哪五天。在SQL中要用窗口函数以及keep/top/rownumber等高级技巧来间接处理,代码难度较大。而且许多数据库(如MySQL)还没有这些高级功能,就只能用复杂的JOIN语句和嵌套的子查询来实现了。如果是多层分组,多级关联,则计算过程会更加复杂。

集算器top函数可以按行号、最大值、最小值等方式取出分组中的前N,解决此类问题会更加容易,下面用一个例子来说明。

 

数据库表golf存储着多位会员的高尔夫得分情况,请取出每位会员成绩最好的三次得分情况,部分数据如下:



 

集算器代码:



 

A1:从数据库取数。点击该单元格,可以看到取数结果:



 

A2=A1.group(User_ID)。将A1的计算结果分组,结果如下:



 

如上图,数据按照User_ID分为了多个组,每行代表一组。点击蓝色超链接,可以看到组内成员,如下:



 

A3=A2.(~.top(-Score;3))。计算出每组数据Score字段前三的记录。这里的“~”表示每组数据,~.top()表示依次对每组数据应用函数top。函数top可以取得数据集的前N条记录,比如top(Score;3)表示按Score升序排列,取前3条(即最小值);top(-Scroe;3)表示按降序排列,取前3条(即最大值);top(#;3)表示按记录顺序取前3条。这一步的计算结果如下:



 

A4=A3.union()。将各组数据合并,结果如下:



 

上述是分步骤的计算,便于维护和调试,也可以将四步合一:db.query("select * from golf").group(User_ID). (~.top(-Score;3)).union()

 

 

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

  • 大小: 56.2 KB
  • 大小: 15.8 KB
  • 大小: 23.1 KB
  • 大小: 6.4 KB
  • 大小: 52.2 KB
  • 大小: 36.8 KB
  • 大小: 23.3 KB
0
0
分享到:
评论

相关推荐

    SQL查找某记录的前后N条数据

    SQL查找某记录的前后N条数据 SQL查找某记录的前后N条记录

    SQL计算某只股票5日移动平均价和5日交易量加权移动平均价(附SQL语句)

    ### SQL 计算某只股票5日移动平均价和5日交易量加权移动平均价 在金融领域,计算股票的移动平均价格是常见的需求之一。对于分析师和技术交易者而言,这种统计方法可以帮助他们理解股票价格的趋势和发展方向。本文将...

    简化版SQL2000

    简化版SQL2000,使用方便,有用的人可以自由下载,我已经用了好几年了,请放心使用。

    [sql server] SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL

    SQL Server 2005 中使用公用表表达式(CTE)简化嵌套 SQL SQL Server 2005 中的公用表表达式(CTE)是一种强大的工具,可以简化嵌套的 SQL 语句,提高代码的可维护性和性能。本文将介绍 CTE 的基本概念、语法和使用...

    sql语句简化工具(jdk1.7版本可执行jar包)

    将格式化后的SQL贴入输入框,点击简化,即可获取简化为一行的SQL !!!!!!!!!!!!!!!!!!!

    sql用函数计算年龄

    在sqlserver中采用存储过程或函数计算年龄/周岁

    计算两个时间相差多少年月日的sql算法

    在SQL中,计算两个日期之间的差值是一种常见的需求,特别是在涉及到日期跨度的业务逻辑处理时。本文将详细介绍如何使用SQL来实现计算两个日期相差多少年、月、日的方法,并通过具体的示例代码来帮助理解这一过程。 ...

    SQL---行转列 详细描述

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

    hivesql计算访问者年龄的SQL

    hivesql计算访问者年龄的SQL

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

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

    SQL 语法 SQL 总结 SQL教程

    SQL 基础 SQL 首页 SQL 简介 SQL 语法 SQL select SQL distinct SQL where SQL AND & OR SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between ...

    sqlserver自动生成sql语句工具sqlserver转oracle

    在IT行业中,数据库管理系统是核心组成部分,SQL Server和Oracle分别是微软和甲骨文公司推出的两款广泛应用的关系型数据库系统。在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到...

    sql server 导入超大SQL脚本文件

    SQL Server 导入超大 SQL 脚本文件 SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业。然而,在实际应用中,我们经常会遇到导入超大 SQL 脚本文件的问题。本文将介绍如何使用 osql 工具来导入超大 SQL ...

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

    - **T-SQL简介**:T-SQL是Transact-SQL的简称,它是微软SQL Server数据库管理系统所使用的SQL方言,是一种用于管理SQL Server数据库的标准语言。 - **SQL Server 2012版本特点**:SQL Server 2012是Microsoft公司...

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

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

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示 SQLPrompt最新版本 绿色版 SQL Prompt 是一款拥有SQL智能提示功能的SQL Server和VS插件。SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动...

    SQL SERVER 2008, 一键卸载工具

    2. **停止服务**:卸载前,工具会先停止所有相关的SQL Server服务,如SQL Server服务、SQL Server代理服务、SQL Server Browser服务等,确保卸载过程中数据安全。 3. **清理注册表**:SQL Server在安装时会在注册表...

    JsonSQL:用SQL语句解析JSON文件

    JsonSQL的基本概念是将JSON文档视为一种虚拟的表格,其中JSON对象的键被视为列名,JSON数组中的元素被视为行。这样,我们就可以使用SQL的SELECT、FROM、WHERE等关键字对JSON数据进行检索和过滤。 **基本语法** 1. ...

    mysql转化成sql server sql转化成mysql工具

    转换工具通常会提供图形化界面,简化操作流程,但也有一些命令行工具,适合开发者进行更精细的控制。无论哪种方式,都需要确保在迁移前后,数据库的结构和数据完整性得到妥善处理,避免因格式不兼容或数据丢失导致的...

    Oracle Sql语句转换成Mysql Sql语句

    在数据库管理领域,Oracle SQL和MySQL SQL是两种广泛使用的SQL方言,它们在语法和功能上存在一定的差异。当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个...

Global site tag (gtag.js) - Google Analytics