首先,这是一项家庭作业,所以我正在寻求帮助,而不是解决方案。让我试着解释一下我的模式。我有三个表,我们将调用用户(包含列 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/