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の場合に拡張できるようになります。 、70から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 に答える