扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
怎么让数据库统计连续相同数据?相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的龙华网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
在数据库里统计某个字段中相同数据直接用Group by就可以了,但如果附加个顺序条件后就有点麻烦了,例如,统计每一个玩家的连胜或者连败情况。 Oracle有窗口分析函数,需要多层嵌套加上高级分析函数才能实现,MySQL、Hive等数据库不如Oracle强大,实现起来就比较费劲了。集算器作为应用和数据库的中间计算层,可以用统一的方式,很简单就能解决此类问题。先看一个简单的例子,表logs 如下,求num中连续 出现3次以上的数字都有哪些?
+----+-----+
| id | num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
集算器的代码是这样的,
A | |
1 | $select id,num from logs |
2 | =A1.group@o(num) |
3 | =A2.select(~.len()>=3).(~.num) |
A1:sql取数
A2:按照相邻num同值分组
A3:选出至少连续出现三次相同的num
如果想知道相同连续值最大有多少条记录,A3中的表达式改为=A2.max(~.len())即可。
有些需求不是按顺序有相同值,是按顺序有相同趋势,比如,找出连续亏损达三月或以上的那些月份的记录,用集算器很简单,只是把相邻数据分组规则从等值条件改为趋势条件即可。代码参考如下:
A | |
1 | =db.query("select * from 收支表 order by 月份") |
2 | =A1.group@o(收入>支出).select(~.收入<~.支出 && ~.len()>=3).conj() |
考勤记录合并进出状态也是类似的情况,在电商、物流和银行也常遇到统计用户连续交易的总额、连续登陆天数、连续登陆开始和结束时间、间隔天数等这样的需求,都可以仿照这些例子很快实现。其实还有很多情况用SQL十分不方便,但用集算器却很简单,感兴趣可以看看集算器优化 SQL 示例汇总 。集算器提供了Jdbc接口,Java可直接调用,使用非常方便。
看完上述内容,你们掌握数据库统计连续相同数据的实现方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流