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

而在SPL中,由于top函数可以按行号、最大值、最小值等方式取分组中的前N行,因此解决此类问题更加容易、清晰。下面就用一个例子来说明。

数据库表golf存储着多位会员的高尔夫得分情况,部分数据如下:

请取出每位会员成绩最好的三次得分情况。

SPL代码:

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

A2:=A1.group(USER_ID)。将A1的结果按照USER_ID,也就是会员分组,结果如下:

每行代表一组,其中是一个会员的所有得分记录,双击浅蓝色格子,可以看到组内成员,如下:

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

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

A5:>file("golf.csv").export@ct(A4)

将计算结果导出到" golf.csv "文件,以便通过excel等工具查看:

除了导出数据, SPL还可以直接被报表工具或java程序调用,调用方法和普通数据库相似,使用它提供的JDBC接口即可向java主程序返回ResultSet形式的计算结果,具体方法可参考相关文档。【Java如何调用SPL脚本】

sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行相关推荐

  1. sql查询出的字段切割_SPL 简化 SQL 案例详解:多层固定分组

    在数据库应用开发中,我们经常需要面对各种复杂的SQL计算,多层固定分组就是其中一种.实现该算法的思路是用left join语句将源数据按照固定的依据对齐,但由于该算法往往涉及分组汇总.行间计算.填补缺 ...

  2. Sqoop安装部署和数据的导入导出案例详解

    目录 一.概述 二.Sqoop的工作机制 三.Sqoop1与Sqoop2架构对比 四.Sqoop安装部署 五.Sqoop的数据导入 1. 列举出所有的数据库 2. 准备表数据 3. 导入数据库表数据到 ...

  3. pandas读取csv文件的前几行数据(nrows参数)、pandas读取csv文件的中间几行数据(skiprows=range(a,b))

    pandas读取csv文件的前几行数据(nrows参数).pandas读取csv文件的中间几行数据(skiprows=range(a,b)) 目录 pandas读取csv文件的前几行数据.pandas ...

  4. 数据湖架构Hudi(五)Hudi集成Flink案例详解

    五.Hudi集成Flink案例详解 5.1 hudi集成flink flink的下载地址: https://archive.apache.org/dist/flink/ Hudi Supported ...

  5. [免费专栏] Android安全之数据存储与数据安全「详解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  6. OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)

    OpenCV-Python实战(14)--人脸检测详解(仅需6行代码学会4种人脸检测方法) 0. 前言 1. 人脸处理简介 2. 安装人脸处理相关库 2.1 安装 dlib 2.2 安装 face_r ...

  7. 04-mysql数据备份之mysqldump命令详解

    MYSQL数据备份之mysqldump命令详解 一.mysqldump 简介 mysqldump 是 MySQL 自带的逻辑备份工具. 它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数 ...

  8. pyecharts在数据可视化中的应用详解

    使用pyecharts进行数据可视化 安装  pip install pyecharts也可以在pycharm软件里进行下载pyecharts库包. 下载成功后进行查询版本号 import pyech ...

  9. 【Dash搭建可视化网站】项目12:全球恐怖主义数据大屏制作步骤详解

    全球恐怖主义数据大屏制作步骤详解 1 项目效果图 2 项目架构 3 文件介绍和功能完善 3.1 assets文件夹介绍 3.2 app.py和index.py文件完善 3.3 header.py文件完 ...

最新文章

  1. idea中链接mysql查询_在Idea中编写Java程序连接查询Sqlite数据库
  2. Scalaz(23)- 泛函数据结构: Zipper-游标定位
  3. 设计模式十三:proxy(代理)——对象结构型模式
  4. Vue实现仿音乐播放器2-新建Vue项目vuemusicplayer
  5. JavaScript 表单验证
  6. 设计模式学习总结1 - 创建型1 - Abstract Factory抽象工厂模式
  7. 用友u8数据库表结构
  8. web.xml 中的listener、 filter、servlet 加载顺序及其详解
  9. 14. Longest Common Prefix【leetcode】
  10. 病毒 Worm.Logo.g
  11. MS OFFICE在LINUX上的视觉效果跟WINDOWS相差太大
  12. SIM868获取LBS位置
  13. 计算机图形学——简单图形绘制
  14. 最优化理论——线搜索技术·黄金分割法
  15. python算法练习——解空间的穷举搜索与Google方程式
  16. pycharm如何设置官方中文?pycharm如何汉化?pycharm终于支持官中了!!!
  17. ROS系列教程三:roslaunch文件及参数服务器
  18. 计算机操作处于挂起状态,计算机重新启动操作可能处于挂起状态怎么办?
  19. 操作系统——Liunx系统基础知识
  20. 使用driver.js实现新(xin)手(shou)导航,并使展示区域无法点击

热门文章

  1. vue调用手机相机相册_详解Vue调用手机相机和相册以及上传
  2. Latex设置字体大小
  3. 统计多维数组php_PHP多维数组中统计元素个数
  4. arm-linux-gcc libstdc .so.6,mini2440编译内核:usr/lib/libstdc++.so.6 not found
  5. +h eclipse中ctrl_Eclipse 常用的快捷键都有哪些?
  6. 深度学习框架Keras介绍及实战
  7. ajax的请求参数详解以及前后台交互详解
  8. Asp.Net MVC项目通过Git同步到新开发设备上后无法作为网站启动
  9. SpringMVC学习--文件上传
  10. 树——平衡二叉树插入和查找的JAVA实现