怎么实现MySQL库中的按条件变化分组
这篇文章主要介绍“怎么实现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 最大的三行;
到此,关于“怎么实现MySQL库中的按条件变化分组”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341