web-dev-qa-db-ja.com

SELECTクエリを使用せずに、ルーム永続データベースでブール値true(または1)を持つ行数のカウントを取得するにはどうすればよいですか?

私は自分のプロジェクトでルーム永続データベースを使用しています。私は0または1のようなブール値の列があるテーブルを持っていますが、今は値がtrue(または1)であるすべてのブール値のカウントが必要です。

Where句を使用して選択されたすべての行の数を取得することで、選択クエリを使用してこれを達成できることを知っています!

しかし、すべての行をロードしてからカウントを取得するため、このためにwhere句でSelectクエリを使用したくないのですが、行をロードせずにカウントが必要です!他の簡単な解決策を提案してください!ありがとうございました!

16

最終的に私は完璧なソリューションを得ました!次のように、このメソッドをDAOクラスに追加するだけです。

@Query("SELECT COUNT(is_checked) FROM table WHERE is_checked = 1")
int getNumberOfRows();

https://medium.com/@florina.muntenesc のFlorina Muntenescuに感謝します

37

集約関数sumを使用すると、次のことができます。

select
    sum(
        case
            when t.VALUE = 1 then
                1
            else
                0
        end
    )
from
    table t

集計フィールドによってインデックスが付けられていない場合、SQLiteエンジンはテーブル全体を読み取ることに注意してください。テーブルにレコードがほとんどない場合は問題ありません。そうでない場合は、インデックス付きフィールドのfromキーワードの使用を検討することをお勧めします。

1
Northern Poet