我有一个长度表,我希望使用ORACLE SQL进行聚合,基于类似列的分组,但是如果它们在表行中被“垂直拆分”,则我也希望对其进行分区。 - 前两列的相似数据。
以下是一些有希望解释情况的示例数据 -
getComputedStyle(el).display
我希望结果是 -
Room1 Room2 Length
A A 1
A A 1.5
B B 3
B B 1
A A 2
A A 3
当我尝试使用任何标准分组安排来实现上述目标时,我总是以A / A数据的单行结束,总长度为7.5,但我想我应该能够以某种方式对数据进行分区这样我最终可以得到上面的三行结果,但没有经验。
我试图在此网站上找到类似分区问题的现有解决方案,但一直未成功。
对此有任何帮助将不胜感激。
亲切的问候。
答案 0 :(得分:2)
SQL表表示无序集,因此您需要一个指定该排序的列。我假设这样一个列有一个名称,比如id
。
如果是这样,您可以通过几种不同的方式完成您想要的任务。一种方法是行号的差异:
select room1, room2, sum(length)
from (select t.*,
row_number() over (order by id) as seqnum,
row_number() over (partition by room1, room2 order by id) as seqnum_rr,
from t
) t
group by room1, room2, (seqnum_rr - seqnum)
order by min(id);
要了解其工作原理,运行子查询并查看结果会有所帮助。您应该看到为什么行号的差异标识具有相同值的相邻行。