sql - 在多行中显示值 0 的 COUNT(*) 列

标签 sql postgresql count

我有一个表内容

内容(id、contentText、contentDate、idUser → 用户、contentType)

和一个表格VoteQuestion

投票问题(idUser → 用户,idQuestion → 内容,isUp)

例如,我想选择前 30 个最近的问题。

SELECT * 
FROM "Content" 
WHERE "type" = 'QUESTION'
ORDER BY "contentDate"
LIMIT 30

但是,我想将包含与此问题相关的信息的另一列连接到此,因此我不需要为返回的每个问题再次查询数据库。

例如,我想计算每个问题的票数,并在同一行中返回所有票数。

例子:

| id | contentText | contentDate | idUser | contentType | votes |
-----------------------------------------------------------------
| 2  |   'abc'     | '2013-03-25'|  192   |  'QUESTION' |  10   |

我尝试了以下查询:

WITH question AS
(SELECT * 
FROM "Content" 
WHERE "type" = 'QUESTION'
ORDER BY "contentDate"
LIMIT 30
)

SELECT COUNT("VoteQuestion"."idUser") 
FROM "VoteQuestion", question
WHERE "idQuestion" = question."id"
GROUP BY question."id";

但这不会返回投票数 = 0 的问题(只返回 16 个问题,而不是 30 个)。如何解决?

那么,我怎样才能连接两个表呢?以及如何在查询中减去 isUp 为真且 isUp 为假的选票?

最佳答案

您可以选择投票数:

SELECT Content.* , 
(
  SELECT COUNT(*) 
  FROM VoteQuestion
  WHERE idQuestion = Content.id
) as votes
FROM Content
WHERE type = 'QUESTION'
ORDER BY contentDate
LIMIT 30

关于sql - 在多行中显示值 0 的 COUNT(*) 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867092/

相关文章:

mysql - 使用子查询时 WHERE 子句中的未知列

mysql - 复杂的 SQL 查询 - 连接表中字段的总和

postgresql - 减少Postgres Docker的日志输出?

sql - PostgreSQL select * 其中列包含数组值

MySQL 计算一行中的 2 列并与另一个查询连接

sql - SQL 数据库的采样

sql - 在单个记录上返回多行

针对 PPGool II 的 Java 查询导致 "unnamed prepared statement does not exist"错误

mysql - 计算多行数

python - Python中字符串中子字符串的重叠计数