如何 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 |
现在我想selectnewCommentCount
和allCommentCount
作为服务器对浏览器的响应。有什么办法可以 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;
我有一个 record
table 和它的 comment
table,比如:
| commentId | relatedRecordId | isRead |
|-----------+-----------------+--------|
| 1 | 1 | TRUE |
| 2 | 1 | FALSE |
| 3 | 1 | FALSE |
现在我想selectnewCommentCount
和allCommentCount
作为服务器对浏览器的响应。有什么办法可以 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;