一句话实现MySQL库中的按连续等值分组「终于解决」

一句话实现MySQL库中的按连续等值分组「终于解决」这种分组的依据是比较上一行字段值,发生变化时产生新组。SQL 仅支持等值分组,要想实现这种有序分组就得经过几次数据变换,变换成等值分组。以支持窗口函数的新版 MySQL 为例,大概经过这么三步: 1…

一句话实现MySQL库中的按连续等值分组

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

1、得出变化标志字段 flag。通过窗口函数 lag 得到上一行的字段值,发生变化 flag=1,否则为 0;

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

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

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

 

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

=connect(”mysqlDB”).query(“select * from t”).group@o(f)

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

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

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

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

 

除了连续等值分组,还有更通用的有序条件分组,比如与上一行的差值大于 10 时,产生新组:

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

还有按照序号分组,嵌套分组等多种 SQL 难实现的分组方式,详情参考《分组子集》

 

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

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

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

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

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

相关推荐

  • 盘点 | 主流云原生数据库技术方案

    盘点 | 主流云原生数据库技术方案作者:柯煜昌 顾问软件工程师 目前从事 RadonDB 容器化研发,华中科技大学研究生毕业,有多年的数据库内核开发经验。 你将 Pick 这些内容: 云原生的概念 云原生数据库的概念 两种主流技术路线

    2023-04-22
    106
  • Spark内存管理[通俗易懂]

    Spark内存管理[通俗易懂]1、spark的一大特性就是基于内存计算,Driver只保存任务的宏观性的元数据,数据量较小,且在执行过程中基本不变,不做重点分析,而真正的计算任务Task分布在各个Executor中,其中的内存数据

    2023-01-30
    97
  • Python编程:用代码重塑世界

    Python编程:用代码重塑世界Python作为一种高级编程语言,因为其简单易学、多功能性和强大的库支持而受到广泛的欢迎。Python编程技能已经成为当前IT和计算机科学领域最为基础的技能之一。它在日常生活中的应用越来越多,涉及面也越来越广泛,从网络编程、科学计算、自然语言处理到机器学习和人工智能等等。Python代码编写的可读性和易维护性也使其成为一个理想的解决方案。

    2024-01-09
    58
  • oracle11g归档日志路径_oracle查看归档空间大小

    oracle11g归档日志路径_oracle查看归档空间大小1.查看当前归档日志目录 SQL> show parameter recovery NAME TYPE VALUE db_recovery_file_dest string /u01/app/ora…

    2023-03-27
    112
  • 一句话实现MySQL库中的按连续等值分组「终于解决」

    一句话实现MySQL库中的按连续等值分组「终于解决」这种分组的依据是比较上一行字段值,发生变化时产生新组。SQL 仅支持等值分组,要想实现这种有序分组就得经过几次数据变换,变换成等值分组。以支持窗口函数的新版 MySQL 为例,大概经过这么三步: 1…

    2023-03-13 10:30
    103
  • Python切片的用法

    Python切片的用法切片是指对于某个序列,可以通过一定的方式选择其中的一部分,并返回一个新的序列。切片的操作是非常常用且高效的,特别是在数据处理和处理大数据量时。Python提供了很简单的方法对序列进行切片。

    2024-04-09
    22
  • 腾讯云开发者会议有感

    腾讯云开发者会议有感我带着很多问题去的,很遗憾,这些问题很少有找到答案。各种领导上去演讲,感觉像是赶集,像是完成任务似的,很多问题没有深入,总是在告诉我各种各样的名词,但是也不问问我认识不认识这些东西… 但是这次大…

    2022-12-17
    97
  • Python字符串分割:更快、更高效的数据处理方法

    Python字符串分割:更快、更高效的数据处理方法对于Python开发者而言,字符串分割是一项必备技能。在数据处理过程中,字符串分割可以帮助我们将数据从一个长字符串中提取出来,并且可以根据特定的规则进行分隔。在本文中,我们将通过多个方面详细阐述如何使用Python进行字符串分割,并且制定出更快、更高效的数据处理方法。

    2024-01-30
    59

发表回复

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