web-dev-qa-db-fra.com

Comment puis-je obtenir le nombre de lignes dont la valeur booléenne est vraie (ou 1) dans la base de données persistante Room sans utiliser la requête SELECT?

Je travaille avec la base de données persistante Room dans mon projet. J'ai une table dans laquelle il y a une colonne pour les valeurs booléennes comme dans 0 ou 1, maintenant je veux le nombre de toutes les valeurs booléennes dont la valeur est vraie (ou 1).

Je sais que je peux y parvenir en utilisant la requête de sélection en obtenant le nombre de toutes les lignes sélectionnées en utilisant la clause where!

Mais je ne veux pas utiliser la requête Select avec la clause where pour cela car cela chargera toutes les lignes et ensuite j'obtiendrai le nombre, mais je veux le nombre sans charger aucune ligne! Suggérez d'autres solutions simples s'il vous plaît! Merci!

16
Priyanka Alachiya

Enfin, j'ai la solution parfaite! Ajoutez simplement cette méthode dans la classe DAO comme suit:

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

Tous nos remerciements à Florina Muntenescu à https://medium.com/@florina.muntenesc

37
Priyanka Alachiya

L'utilisation de la fonction d'agrégation sum peut vous aider:

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

Veuillez noter que le moteur SQLite lira la table entière, s'il n'est pas indexé par champ d'agrégation. Ce n'est pas un problème s'il n'y a que quelques enregistrements dans la table, sinon il vaut mieux envisager d'utiliser le mot clé from des champs indexés.

1
Northern Poet