首页 > 解决方案 > 数据库查询(RoomDB)

问题描述

我从 isRead=0 的表通知中获取 Title 和 COUNT(isRead)

它正在获取每个标题的标题和已读计数。它的罚款和回报如下

Title       count
john          3
denil         4


            @Query("SELECT title,COUNT(isRead)as isRead FROM Notification WHERE 
            pkgName = :packagename and isRead=0 Group By title")

但如果 count=0 ,则返回 null。

我需要的是如下;

Title     count
john       0
denil      0

我该怎么做。???

标签: sqldatabase

解决方案


如果您想要包的表中的所有数据,则将条件移动到SELECT

SELECT title, COUNT(CASE WHEN isRead = 0 THEN 1 ELSE 0 END) as isRead
FROM Notification
WHERE pkgName = :packagename 
GROUP BY title;

如果您想要表中的所有标题,无论包如何:

SELECT t.title, COUNT(n.title)
FROM (SELECT DISTINCT title FROM Notification) t LEFT JOIN
     Notification n
     ON n.title = p.title AND t.pkgName = :packagename AND
        n.isRead = 0
GROUP BY t.title;

如果您有另一个包含所需标题列表的表,请使用它而不是子查询 for t


推荐阅读