如何 select 所有行的总和值和某些特定行中的值?

How to select both sum value of all rows and values in some specific rows?

我有一个 record table 和它的 comment table,比如:

| commentId | relatedRecordId | isRead |
|-----------+-----------------+--------|
| 1         | 1               | TRUE   |
| 2         | 1               | FALSE  |
| 3         | 1               | FALSE  |

现在我想selectnewCommentCountallCommentCount作为服务器对浏览器的响应。有什么办法可以 select 这两个字段合二为一 SQL?


我试过这个:

SELECT `isRead`, count(*) AS cnt FROM comment WHERE relatedRecordId=1 GROUP BY `isRead`
| isRead | cnt |
| FALSE  | 2   |
| TRUE   | 1   |

但是,我必须使用一种特殊的数据结构来映射它,并通过上层编程语言将两行的cnt字段相加得到allCommentCount。我想知道我是否可以通过 SQL 一步获得以下格式的数据:

| newCommentCount | allCommentCount |
|-----------------+-----------------|
| 2               | 3               |

我什至不知道如何描述这个问题。所以我在 Google 和 Whosebug 中没有得到任何搜索结果。 (可能是因为我的英语不好)

使用条件聚合:

SELECT SUM(NOT isRead) AS newCommentCount, COUNT(*) AS allCommentCount
FROM comment
WHERE relatedRecordId = 1;

如果我理解你想要显示 newComments 计数和所有评论的总和,那么你可以这样做

   SELECT  SUM ( CASE WHEN isRead=false THEN 1 ELSE 0 END ) AS newComment,
       Count(*) AS AllComments From comments where relatedRecord=1

你也可以为它做存储过程

要水平放置两个结果集,您可以像在 SELECT 子句中对表达式使用子查询一样简单,只要结果集中的行数匹配:

select (select count(*) from c_table where isread=false and relatedRecordId=1 ) as newCommentCount, 
count(*) as allCommentCount 
from c_table where relatedRecordId=1;