私は自分のプロジェクトでルーム永続データベースを使用しています。私は0または1のようなブール値の列があるテーブルを持っていますが、今は値がtrue(または1)であるすべてのブール値のカウントが必要です。
Where句を使用して選択されたすべての行の数を取得することで、選択クエリを使用してこれを達成できることを知っています!
しかし、すべての行をロードしてからカウントを取得するため、このためにwhere句でSelectクエリを使用したくないのですが、行をロードせずにカウントが必要です!他の簡単な解決策を提案してください!ありがとうございました!
最終的に私は完璧なソリューションを得ました!次のように、このメソッドをDAOクラスに追加するだけです。
@Query("SELECT COUNT(is_checked) FROM table WHERE is_checked = 1")
int getNumberOfRows();
https://medium.com/@florina.muntenesc のFlorina Muntenescuに感謝します
集約関数sum
を使用すると、次のことができます。
select
sum(
case
when t.VALUE = 1 then
1
else
0
end
)
from
table t
集計フィールドによってインデックスが付けられていない場合、SQLiteエンジンはテーブル全体を読み取ることに注意してください。テーブルにレコードがほとんどない場合は問題ありません。そうでない場合は、インデックス付きフィールドのfrom
キーワードの使用を検討することをお勧めします。