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

时间:2017-11-26 14:19:47

标签: sql sqlite sum case aggregate-functions

我正在尝试制定一个查询来聚合具有特定值的行之间的行:在此示例中,我想要折叠并将所有具有不同于1的ID的行的时间相加,但仍显示具有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并使用CASE添加一个条件,但到目前为止,我的解决方案只让我对所有行进行求和而且我丢失了间隔,所以我得到了这个:

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

非常感谢任何正确方向的帮助或建议,谢谢!

1 个答案:

答案 0 :(得分:0)

您需要定义分组。 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;