SQL multiple join with count,有问题

标签 sql postgresql count

首先,这是一项家庭作业,所以我正在寻求帮助,而不是解决方案。让我试着解释一下我的模式。我有三个表,我们将调用用户(包含列 id 和名称)、参与方(包含列 id、partydate 和 user_id)和问题(包含列 id、createdate 和 user_id)。我的要求是向每个用户显示去年的派对数量和去年创建的问题。起初我有这样的事情:

SELECT users.id, users.name,  
COUNT(parties.id) AS numparties, COUNT(qustions.id) AS numquestions
FROM users
FULL JOIN parties ON users.id=parties.user_id
FULL JOIN questions ON users.id=questions.user_id
WHERE (parties.partydate > NOW() - interval '1 year' OR parties.partydate IS NULL)
OR (questions.createdate > NOW() - interval '1 year' OR questions.createdate IS NULL)
GROUP BY users.id, users.name

现在这几乎可以工作了!问题是,如果用户在过去一年内没有参加派对或问题,那么他们根本不会出现在结果中。我希望这样的用户出现,我只希望它为每个 numparties 和 numquestions 显示 0。

我想我在这里需要的是某种有条件的计数,我只想计算该派对的派对日期在过去一年内的地方,对于问题也是如此。我只是不确定该怎么做。我有一个 hacky-workaround 方法来做我想做的事,我基本上 UNION 上面的查询与它自己的一个几乎相同的副本,除了我对 numparties 和 numquestions 使用 SUM(0) 并且我的 WHERE 语句就是日期 < = 而不是 >。我觉得这不是解决问题的最佳方法。

有没有正确方向的指示?感谢您的帮助!

最佳答案

看看这个:http://www.w3schools.com/sql/sql_join_left.asp .我认为这可能会为您指明正确的方向。

关于SQL multiple join with count,有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935629/

相关文章:

sql - Postgres : How to search for a value on _all_ fields in an object in a json-type column without knowing the keys

php - 使用计数还是有一个可以计数的字段?

mysql - 检查同一列中的多个值

mysql - 喜欢和正则表达式运算符之间的区别

mysql - 如果我们在列中插入 `NOW()`,则 sql 表的列的数据类型应该是什么

postgresql - 如何使用 id 来显示它的名称? ( Phoenix 框架)

sql - 选择类型为 'x'的所有记录最高为 'version'

javascript - 复选框警报,最多选择 4 项

android - 计算返回 null 的解析用户数

sql - 由 GROUP BY 查询产生的 SELECT 组数