一句话实现MySQL库中的按条件变化分组「终于解决」

一句话实现MySQL库中的按条件变化分组「终于解决」这种分组的依据是比较上一行字段值,发生某种变化时(如变大超过 10)产生新组。SQL 仅支持等值分组,要想实现这种有序条件分组就得经过几次数据变换,变换成等值分组。以支持窗口函数的新版 MySQL …

一句话实现MySQL库中的按条件变化分组

这种分组的依据是比较上一行字段值,发生某种变化时(如变大超过 10)产生新组。SQL 仅支持等值分组,要想实现这种有序条件分组就得经过几次数据变换,变换成等值分组。以支持窗口函数的新版 MySQL 为例,大概经过这么三步:

1、得出变化标志字段 flag。通过窗口函数 lag 得到上一行的字段值,满足变化条件(如本行 – 上一行 >10)flag 设为 1,否则为 0;

2、累加 flag 字段得到 acc 字段。从第一行累加到当前行,还是得用窗口函数实现:sum(flag)…BETWEEN ROWS UNBOUNDED AND CURRENT ROW;

3、按 acc 字段进行常规等值分组即可。

早期没有窗口函数的 MySQL,理论上也能实现,更复杂,就不细说了。

 

这类有序分组如果用 SPL 语言就很简单,用 group 操作的 @i 选项,一句就搞定了:

=connect(”mysqlDB”).query(“select * from t”).group@i(f>~[-1].f+10)

完成分组动作后,得到两层结构的序表 B。后续针对第二层分组子集,做任意计算也都容易一句搞定:

=B.max(~.len()) 得到最大组的行数;

=B.(~.new(f,avg(f2))).conj() 得到每组 f2 的平均值;

=B.(~.sort@z(f2).m(to(3))).conj() 取出每组 f2 最大的三行;

除了有序条件分组,还有有序等值分组,嵌套分组等多种 SQL 难实现的分组方式,详情参考《分组子集》

 

当数据不在数据库里时,SPL 执行复杂计算仍然方便:
=file(“d:/t.csv”).import(;,“,”).group…

SPL能很方便地嵌入到JAVA应用,可参考《Java 如何调用 SPL 脚本》

具体使用方法可参考 《如何使用集算器》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7814.html

(0)
上一篇 2023-03-13
下一篇 2023-03-13

相关推荐

  • linux下Mysql 8.0.19 编译安装

    linux下Mysql 8.0.19 编译安装1 前言 linux下安装MySQL的方式有很多种,包括以仓库的方式安装(yum,apt,zypper),以包的方式安装(rpm,deb),以docker方式安装,从压缩包解压安装,从源码编译安装,…

    2023-02-03
    145
  • 5分钟搞定 PostgreSQL 到 Doris 数据迁移和同步

    5分钟搞定 PostgreSQL 到 Doris 数据迁移和同步简述 Apache Doris 是一个现代化的 MPP 分析型数据库产品,仅需 亚秒级 响应时间即可获得查询结果,能有效地支持实时数据分析。 本文主要介绍如何使用 CloudCanal 快速构建一条稳

    2023-06-13
    176
  • 【已解决】SQL SERVER2008 连接不了本地数据引擎[亲测有效]

    【已解决】SQL SERVER2008 连接不了本地数据引擎[亲测有效]问题:【已解决】SQL SERVER2008 连接不了本地数据引擎 不知道你有没有遇到过这种情况,当装完 sql server2008之后,然后用 *SQL Server身份验证* 或者 *wind…

    2023-01-30
    148
  • iso14001:2015考试试卷A_2019年9月健康管理师考题

    iso14001:2015考试试卷A_2019年9月健康管理师考题Choose three Which three actions can you perfom only with system privileges? A) Truncate a table in…

    2022-12-17
    146
  • 优化Python循环的技巧

    优化Python循环的技巧a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-03-08
    83
  • 【计理01组05号】MySql基础课程【2.0】[通俗易懂]

    【计理01组05号】MySql基础课程【2.0】[通俗易懂]博客推行版本更新,成果积累制度,已经写过的博客还会再次更新,不断地琢磨,高质量高数量都是要追求的,工匠精神是学习必不可少的精神。因此,大家有何建议欢迎在评论区踊跃发言,你们的支持是我最大的动力,你们敢

    2023-05-08
    135
  • 使用Python关闭文件

    使用Python关闭文件无论是读取文件还是写入文件,使用完文件后,我们需要关闭文件,这能够确保文件不会因为被占用而无法进行其他操作,并且可以将缓冲区的内容从内存中写入磁盘,以保证文件操作的准确性。在Python中,关闭文件非常简单,本文将会详细介绍如何使用Python关闭文件以及关闭文件时要注意的事项。

    2024-05-30
    83
  • Ubuntu如何卸载Python 3

    Ubuntu如何卸载Python 3Python 3 是一种非常流行的编程语言,但有时您可能需要卸载它。可能是因为您需要使用其他版本的 Python 或因为您不需要 Python 3 并且想要释放磁盘空间。无论原因是什么,本文将向您展示如何在 Ubuntu 操作系统上卸载 Python 3。

    2024-08-12
    24

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注