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

简化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---行转列 详细描述

    从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 ...

    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能根据数据库的对象名称,语法和用户编写的代码片段自动...

    SQL2005精简版一键安装 sql server2005一键安装

    "SQL2005精简版一键安装"是指通过一个简化的过程来快速安装SQL Server 2005 Express Edition,大大降低了安装的复杂性。 通常,SQL Server的安装过程包括多个步骤,如接受许可协议、选择安装类型、配置服务器实例、...

    SQL SERVER 2008, 一键卸载工具

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

    mybatis自动sql生成插件源码

    MyBatis是一款流行的Java持久层框架,用于简化数据库操作,其特点是将SQL语句与Java代码分离,使得SQL和业务逻辑更加清晰。本项目提供的"mybatis自动sql生成插件源码"则进一步提升了开发效率,通过拦截器...

    Oracle Sql语句转换成Mysql Sql语句

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

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

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

    SQL2008 R2 绿色版 免安装

    SQL2008 R2是微软公司开发的一款关系型数据库管理系统,属于SQL Server系列的其中一员。这个“SQL2008 R2 绿色版 免安装”版本是针对那些希望快速部署和使用的用户设计的,无需进行常规的安装步骤,可以节省时间和...

    Effective MySQL之SQL语句最优化(高清)

    《Effective MySQL之SQL语句最优化》提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。《Effective MySQL之SQL语句最优化》希望能够通过一步步详细介绍SQL优化的方法,帮助...

Global site tag (gtag.js) - Google Analytics