数値フィールドを含む 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の場合に拡張できるようになります。 、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 に答える