sql - 每 2 行 SQL 分组
问题描述
我们有什么:
id|value1|value2|
1 |15 |null |
2 |null |12 |
3 |98 |null |
4 |null |41 |
我们想要的 - 每两行对数据进行分组以获得以下结果:
idGrouped|value1|value2|
1 |15 |12 |
2 |98 |41 |
我想我可以在 id 列上使用模数。
这是一个 Oracle 数据库(但我更喜欢在“纯 sql”中进行)
编辑
它可能不清楚,但重要的部分是“idGrouped”列。我简化了示例,但我需要每 2 行(或“n”行)对数据进行分组。
解决方案
您可以使用条件聚合:
select floor( (id - 1) / 2) as id, max(value1), max(value2)
from t
group by floor( (id - 1) / 2);
这假设它id
是递增的,没有间隙。如果这不是真的,请使用row_number()
:
select floor( (seqnum - 1) / 2) as id, max(value1), max(value2)
from (select t.*, row_number() over (order by id) as seqnum
from t
) t
group by floor( (seqnum - 1) / 2);
推荐阅读
- git - 缩短分支
- javascript - Javascript opencv (opencv.js) 抓取 GC_INIT_WITH_MASK 问题示例?
- excel - 如何以编程方式删除引用?
- php - 重新格式化时间响应类似于 db 格式
- php - 尝试解决断开的链接 Laravel 安装(使用 MAMP)
- excel - 范围类的高级过滤方法失败
- javascript - cypress 中的条件测试
- python - AttributeError:“事务”对象没有属性“附加”
- jenkins - CentOS - java 运行时内存不足
- javascript - 出现错误:“无法绑定到‘ngModal’,因为它不是‘输入’的已知属性”