如何在Room持久性数据库中获取布尔值为true(或1)的行数而不使用SELECT查询?

17
我在项目中使用Room持久性数据库。我有一个表,其中有一个用于布尔值(0或1)的列,现在我想要计算所有布尔值为true(或1)的数量。
我知道可以通过使用select查询并使用where子句获取所有选定行的计数来实现这一点!
但是我不想为此使用带有where子句的Select查询,因为它会加载所有行,然后我将得到计数,但我希望在不加载任何行的情况下获得计数!请提供其他简单解决方案!谢谢!

这里使用 android 标签是无用的。 - Northern Poet
2
@NorthernPoet 这并不是实际情况!因为在Android中使用了Room持久性数据库! - Priyanka Alachiya
同意,抱歉误解了。 - Northern Poet
2个回答

44

最后我找到了完美的解决方案!只需将此方法添加到DAO类中,如下所示:

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

感谢Florina Muntenescu在https://medium.com/@florina.muntenescu的帮助。


2
供参考,我认为感谢是针对这篇Medium文章中的评论 - methodsignature
1
哇,这真是太准确了!像魔法一样好用。 - sud007

0

使用聚集函数 sum 可以帮助您:

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

请注意,如果没有按聚合字段建立索引,则SQLite引擎将读取整个表。如果表中只有少量记录,则没有问题,否则最好考虑使用带有索引字段的from关键字。

能否详细说明一下答案?我正在使用Room持久化库,但它不允许我在我的DAO类中使用@Query注释编写此查询! - Priyanka Alachiya
@NorthernPoet 嘿,我又試了這個解決方案!加上一些空格和修正您的查詢語句中的 THEN 關鍵字後,它可以運行了!非常感謝 :) - Priyanka Alachiya
很高兴知道它对你有帮助。我进行了一些小的编辑,添加了细节并更正了from关键字缺失,以便其他用户使用。 - Northern Poet
如果我们需要在值为1和值为2时分别计算两个计数,该怎么办? - Yousuf Sohail
1
这是什么语法? - Afzal N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接