Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite中的按范围分组_Sqlite_Group By_Range - Fatal编程技术网

SQLite中的按范围分组

SQLite中的按范围分组,sqlite,group-by,range,Sqlite,Group By,Range,我有一个SQLite表,其中包含一个数字字段名称。我需要按此列的范围分组,如下所示:选择CASTfield_name/100作为INT,从表中选择COUNT*groupby CASTfield_name/100作为INT,但包括没有值COUNT的范围应该是0。我不知道如何执行这样的查询?您可以通过使用联接和一个额外的表来实现这一点 额外的表将包含您希望在查询响应中为其设置行的每个值。这不仅可以将缺少的CASTfield_name/100作为返回值之间的INT值进行填充,还可以将其展开,以便如果当

我有一个SQLite表,其中包含一个数字字段名称。我需要按此列的范围分组,如下所示:选择CASTfield_name/100作为INT,从表中选择COUNT*groupby CASTfield_name/100作为INT,但包括没有值COUNT的范围应该是0。我不知道如何执行这样的查询?

您可以通过使用联接和一个额外的表来实现这一点

额外的表将包含您希望在查询响应中为其设置行的每个值。这不仅可以将缺少的CASTfield_name/100作为返回值之间的INT值进行填充,还可以将其展开,以便如果当前组为5、6、7,则可以包含0到10

在其他类型的SQL中,您将能够进行右连接或完全外部连接,并且您已经在路上了。唉

因此,我们将使用交叉连接将所有内容连接到所有内容,然后进行筛选。如果你有一个相对较小的数据库或少量的组,你的状态就很好。如果两者都有大量数据,这将是一种非常密集的方法,交叉连接结果将包含组行的rowsofdata*,所以请注意

例如:

表:用于报告的组

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;

如果我在表中有几百万行和数千个组呢?那么你必须创建这数千个组。在读取SQL结果的代码中检测“缺失”组可能更容易。。。如果您仅限于SQLite,那么这并没有多大帮助,但如果您转向更健壮的后端,则值得考虑。