Oracle、MySQL、Hive 等数据库如何统计连续相同
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,在数据库里统计某个字段中相同数据直接用Group by就可以了,但如果附加个顺序条件后就有点麻烦了,例如,统计每一个玩家的连胜或者连败情况。 Oracle有窗口分析函数,需要多层嵌套加上高级分析函数才
千家信息网最后更新 2025年02月16日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安全错误
数据库的锁怎样保障安全
浙江计算机网络技术专升本
河北手机软件开发多少钱
网络安全高手的蜕变之旅
如何搭共享服务器
前端如何与数据库交互
方舟服务器没有存档目录
sql增加一行相同数据库
内蒙古嵌入式软件开发
网络安全产业发展论坛
新乡市川海网络技术有限公司骗子
vb数据库记录为空
泰尔网测app云服务器空
华为网络技术实验室首席
网络安全模式键鼠没反应
邛崃网络安全宣传周
熊片数据库手机版
自主协议与网络安全
名词解释什么是网络安全
辽宁服务器电源价格是多少
计算机用户的网络安全培训
维护网络安全自查自纠
二十九所软件开发
长沙软件开发一度教育
软件开发怎么刷新数据
sql2008新建数据库
关于网络安全的手初中
辉煌微信公众号服务器
暗黑西游记多玩服务器
星瑞格数据库跟谁类似
日本目前网络安全