Oracle、MySQL、Hive 等数据库如何统计连续相同
发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,在数据库里统计某个字段中相同数据直接用Group by就可以了,但如果附加个顺序条件后就有点麻烦了,例如,统计每一个玩家的连胜或者连败情况。 Oracle有窗口分析函数,需要多层嵌套加上高级分析函数才
千家信息网最后更新 2024年11月14日Oracle、MySQL、Hive 等数据库如何统计连续相同
在数据库里统计某个字段中相同数据直接用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可直接调用,使用非常方便,有关集算器安装使用、获得免费授权和相关技术资料,参见 如何使用集算器。
相同
数据
数据库
统计
情况
条件
顺序
代码
例子
函数
天数
收入
月份
趋势
需求
分析
分组
登陆
强大
费劲
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
有诚信的软件开发培训
软件开发岗工资高吗
情鸽软件开发
我的世界封神斗罗服务器怎么换号
承德巽通网络技术
福建hp服务器虚拟化云空间
安全狗更改服务器端口
计算机引用数据库解答题
网络安全课程学习感悟200字
软件开发历程
重启java服务器
软件开发 日文式样书
数据库的外接表示什么
注册网络技术公司费用
魏县软件开发那的招工
网络安全风险原因分析
禾雀花网络技术有限公司
vs程序 数据库连接
网络安全专业哪个大学最好
贵州生鲜配送软件开发
高科技互联网软件
excel开发数据库
微信服务器小程序异常
源码服务器
网络安全发言稿银行
国家网络安全局工作总结
蚌埠嘉锐互联网科技有限公司
软件开发企业营业成本占比
我的世界空岛服务器区块怎么找
网络安全与执法课本