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