sql - 数据库查询(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
我该怎么做。???
解决方案
如果您想要包的表中的所有数据,则将条件移动到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
。
推荐阅读
- php - 使用 PHP 从包含列表的 JSON 对象中获取具有 max(value) 的列表项的最佳方法
- python - python中的for循环和if语句
- batch-file - 7Zip 通过批处理和任务计划程序压缩非常慢
- powerbi - Power BI DAX - 具有过滤器的总列的百分比
- python - 在 pandas 的另一个中创建一个具有值的新列
- javascript - HTTP 请求后 JSON 输入意外结束
- django - Django 管理员能够将图像上传到 S3 存储桶,但无法加载到模板上
- ios - 为具有多个部分的表视图创建搜索栏
- javascript - 如何通过调用 next(error) 来测试 express 中间件是否抛出错误
- c# - Asp.Net Core 3.1 MVC 客户端验证不适用于位于 Areas 文件夹中的视图