这篇文章主要讲解了“怎么实现MySQL库中的按连续等值分组”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么实现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 最大的三行;
感谢各位的阅读,以上就是“怎么实现MySQL库中的按连续等值分组”的内容了,经过本文的学习后,相信大家对怎么实现MySQL库中的按连续等值分组这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是天达云,小编将为大家推送更多相关知识点的文章,欢迎关注!