mysql以两个条件作为分组_一句话实现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

具体使用方法可参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值