我正在尝试制定一个查询来聚合具有特定值的行之间的行:在此示例中,我想要折叠并将所有具有不同于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
非常感谢任何正确方向的帮助或建议,谢谢!
答案 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;