0

我有一个包含数字字段的 SQLite 表field_name。我需要按此列的范围分组,如下所示:SELECT CAST(field_name/100 AS INT), COUNT(*) FROM table GROUP BY CAST(field_name/100 AS INT),但包括没有值的范围(它们的 COUNT 应该是0)。而且我不知道如何执行这样的查询?

4

1 回答 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 回答