sqlite 按一个查询分组并计算总和

7rfyedvj  于 2022-12-13  发布在  SQLite
关注(0)|答案(1)|浏览(338)

我有一个简单数据库来存储数据:运动类型(步行、跑步等)、距离、时间戳。我希望生成报告并计算所有记录的距离总和,按运动类型分组并计算每种类型的总和,按天分组并计算每天的总和。
但通过一次查询,我只能得到一种和:没有group - total。如果我使用"GROUP BY"参数,则只有组记录没有总和。
如果使用两组,我不能得到前一组的总和(移动类型)。
所以,我需要使用几个查询还是我可以做一个?
我用SQLiteDatabase query()的方法。
我不知道如何通过光标得到第一组,然后第二组,等等。

neskvpey

neskvpey1#

如果您需要sum(distance) by movement_kindsum(distance) by movement_date搭配单一查询。您可能想要搭配SQLiteDatabase.rawQuery()搭配类似下列的查询使用:

select movement_kind, 
       null as movement_date, 
       sum(distance) as distance 
  from s7 
 group by movement_kind
union all
select null, 
       movement_date, 
       sum(distance) 
  from s7 
 group by movement_date;

结果如下所示:

movement_kind|movement_date|distance|
-------------+-------------+--------+
run          |             |     6.0|
walk         |             |    15.0|
             |   2022-12-01|     5.0|
             |   2022-12-02|     3.0|
             |   2022-12-03|     4.0|
             |   2022-12-04|     4.0|
             |   2022-12-05|     5.0|

在应用程序代码中,需要检查movement_kindmovement_date是否为NULL。如果是,则distance中的值将按另一列分组。
示例数据:

create table s7 (
    movement_kind   text,
    distance        float,
    movement_date   date);
    

insert into s7
values
('walk', 5, '2022-12-01'),
('walk', 3, '2022-12-02'),
('walk', 1, '2022-12-03'),
('walk', 2, '2022-12-04'),
('walk', 4, '2022-12-05'),
('run' , 3, '2022-12-03'),
('run' , 2, '2022-12-04'),
('run' , 1, '2022-12-05');

相关问题