在SQLite中按范围分组

时间:2012-12-16 18:40:09

标签: sqlite group-by range

我有一个包含数字字段field_name的SQLite表。我需要按照此列的范围进行分组,如下所示:SELECT CAST(field_name/100 AS INT), COUNT(*) FROM table GROUP BY CAST(field_name/100 AS INT),但包括没有值的范围(COUNT应为0)。我无法得到如何执行这样的查询?

1 个答案:

答案 0 :(得分:1)

你可以通过使用连接和(虽然kludgy)一个额外的表来做到这一点。

额外的表格将包含您在查询响应中需要一行的每个值(这不仅会在您返回的值之间填充缺少的CAST(field_name/100 AS INT)值,还会让您展开它以便如果您当前的小组是5,6,7,则可以包括0到10。

在SQL的其他版本中,您可以正确加入或完全外部联接,并且您将继续前进。唉,SQLite doesn't offer these

因此,我们将使用交叉连接(将所有内容连接到所有内容),然后进行过滤。如果你有一个相对较小的数据库或少数几个组,你的状态很好。如果你有大量的两者,这将是一个非常密集的方式(交叉连接结果将有#ofRowsOfData * #ofGroups行,所以小心)。

示例:

表:groups_for_report

desired_group
-------------
0
1
2
3
4
5
6

表:数据

fieldname    other_field
---------    -----------
250          somestuff
230          someotherstuff
600          stuff

你会使用像

这样的查询
select groups_for_report.desired_group, count(data.fieldname)
from data
cross join groups_for_report
where CAST(fieldname/100.0 AS INT)=desired_group
group by desired_group;