聚合具有特定值的两行之间的行

Posted

技术标签:

【中文标题】聚合具有特定值的两行之间的行【英文标题】:Aggregate rows between two rows with certain value 【发布时间】:2018-05-09 21:02:05 【问题描述】:

我正在尝试制定一个查询来聚合具有特定值的行之间的行:在此示例中,我想折叠并汇总 ID 不是 1 但仍显示 ID 行的所有行的时间1.

这是我的桌子:

  ID | Time 
 ----+-----------
   1 |        60
   2 |        10
   3 |        15
   1 |        30
   4 |       100
   1 |        20

这是我正在寻找的结果:

  ID     |      Time 
 --------+-----------
   1     |        60
   Other |        25
   1     |        30
   Other |       100
   1     |        20

我试图求和并添加一个条件与 CASE,或者但到目前为止,我的解决方案只能让我对所有行求和并且我丢失了间隔,所以我得到了这个:

  ID         |      Time 
 ------------+-----------
   Other     |        125
   1         |        110

任何正确方向的帮助或建议将不胜感激,谢谢!

【问题讨论】:

我认为您还需要有一列来提供您假设表中存在的顺序。 IE。我们需要一个列,其中1 60 是第一条记录,2 10 是第二条记录,依此类推。 【参考方案1】:

您需要定义分组。 SQLite 不适合这种操作,但您可以通过将“1”值与每个值相加来实现。

在 SQLite 中,我们可以使用rowid 列进行排序:

select (case when id = 1 then '1' else 'other' end) as which,
       sum(time)
from (select t.*,
             (select count(*) from t t2 where t2.rowid <= t.rowid and t2.id = 1) as grp
      from t
     ) t
group by (case when id = 1 then '1' else 'other' end), grp
order by grp, which;

【讨论】:

以上是关于聚合具有特定值的两行之间的行的主要内容,如果未能解决你的问题,请参考以下文章

聚合具有两个或多个具有相同值的列的行

在聚合查询中计算具有特定条件的行

SQL 聚合具有相同 id 的行,辅助列中的特定值

SQL Server rand() 聚合

如何在数据框中聚合具有多列的重复行[重复]

将具有不同值的两行连接在一行中