我有一个包含数字字段的 SQLite 表field_name
。我需要按此列的范围分组,如下所示:SELECT CAST(field_name/100 AS INT), COUNT(*) FROM table GROUP BY CAST(field_name/100 AS INT)
,但包括没有值的范围(它们的 COUNT 应该是0
)。而且我不知道如何执行这样的查询?
问问题
1589 次
1 回答
1
您可以通过使用连接和(虽然很笨拙)一个额外的表来做到这一点。
额外的表将包含您在查询响应中想要一行的每个值(这不仅会填充 CAST(field_name/100 AS INT)
返回值之间的缺失值,还可以让您扩展它,如果您当前的组是 5、6 , 7 您可以包括 0 到 10。
在其他风格的 SQL 中,您可以进行右连接或完全外连接,然后就可以使用了。唉,SQLite 不提供这些。
因此,我们将使用交叉连接(将所有内容连接到所有内容)然后过滤。如果您有一个相对较小的数据库或少量组,那么您的状态就很好。如果两者都有大量,这将是一种非常密集的方法(交叉连接结果将具有#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;
于 2012-12-17T02:52:19.767 回答