Oracle、MySQL、Hive 等数据库如何统计连续相同
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,在数据库里统计某个字段中相同数据直接用Group by就可以了,但如果附加个顺序条件后就有点麻烦了,例如,统计每一个玩家的连胜或者连败情况。 Oracle有窗口分析函数,需要多层嵌套加上高级分析函数才
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
图像数据库构建
网络安全展示板幼儿园
2022北京魔兽服务器
ym网络技术有限公司logo
免费软件开发怎么做
网络安全运营工程师好学吗
怎样查海关数据库
ads是什么网络安全设备
Go数据库关联关系
西财数据库调查
网络安全使用禁令
华为 软件开发 文档模板
湖北银保监局罚单网络安全
关于网络安全的儿童画初一
nfc是无线传感网络技术吗
麦快我的世界服务器
数据库原理与应用课程论文
如何查询自己数据库触发器
服务器防火墙规则
c编写服务器
河南软件开发一般收费
海南安迈云网络技术公司
山舟网络技术有限公司现在状况
我们应对防范网络安全
40个数据库
虚拟-托管服务器管理规
wp数据库表多了
广州市网络安全通报
国产分布式实时数据库价格
新服务器部署数据库