Oracle、MySQL、Hive 等数据库如何统计连续相同
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,在数据库里统计某个字段中相同数据直接用Group by就可以了,但如果附加个顺序条件后就有点麻烦了,例如,统计每一个玩家的连胜或者连败情况。 Oracle有窗口分析函数,需要多层嵌套加上高级分析函数才
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
上海挚品互联网科技有限公司
互联网新科技
互联网是第几次科技革命的成果
互联网科技工作委员会主任
科技赋能下的互联网金融
互联网金融 科技
高科技与互联网
奇酷互联网科技公司
亿策互联网科技
互联网科技缩写
壕鑫互联网络科技
青海省互联网新科技
济南和联互联网科技有限公司
互联网金融科技公司干啥的
互联网科技商业
企晟互联网信息科技有限公司
每天都有哪些好的互联网科技
互联网科技大会大佬
恒生互联网科技趋势
银川新华互联网科技学校招聘
互联网下的科技发展
互联网 科技
互联网 的科技创新
火传媒上海互联网科技
上海亿帐通互联网科技
丰台科技园 互联网公司
四个字互联网科技公司取名
梅州GM互联网络科技有限公司
四川互联网展示科技馆设计
本届互联网大会上的黑科技