Oracle、MySQL、Hive 等数据库如何统计连续相同
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,在数据库里统计某个字段中相同数据直接用Group by就可以了,但如果附加个顺序条件后就有点麻烦了,例如,统计每一个玩家的连胜或者连败情况。 Oracle有窗口分析函数,需要多层嵌套加上高级分析函数才
千家信息网最后更新 2025年02月07日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安全错误
数据库的锁怎样保障安全
怎么查看云服务器的安全组
盲盒软件开发费用
朝阳区品质软件开发服务电话
软件开发和软件实施那个累
路由器里的服务器怎么打开
网络安全法的特征包括
网络技术员需要电脑知识
access数据库公式
玉树软件开发技巧
staruml 数据库
软件开发受限制吗
银屑病医疗保健数据库
世界上最大的ai服务器厂
新开路租房软件开发
电脑版的服务器mc在哪儿玩
西安手机开发软件开发
数据库创建表格模板
软件开发的自荐信怎么写
市场部数据库
优拨智客软件开发
新沟的电脑有没有数据库
TCGA数据库MGMT
大工网络安全考试
无锡厂家代理服务器
数据库什么是变量值
虚拟资源项目之网络技术教程
虚拟机和服务器怎么做web
数据库运维报价
企业级储存服务器拷贝读取速度
图像处理 服务器