这个很容易。
我的问题与this one非常相似;基本上,我有一个帖子表,一个带有post_id外键的注释表,以及一个带有post id的外键的表。我想做一个查询并返回一个结果集,每个帖子包含一行,以及相关评论和投票的数量。
从我上面链接的问题来看,似乎为了让每个帖子和评论计数只包含一行,这是正确的方法:
SELECT a.ID, a.Title, COUNT(c.ID) AS NumComments
FROM Articles a
LEFT JOIN Comments c ON c.ParentID = a.ID
GROUP BY a.ID, a.Title
我认为添加投票计数就像添加另一个左连接一样简单,如
SELECT a.ID, a.Title, COUNT(c.ID) AS NumComments, COUNT(v.id AS NumVotes)
FROM Articles a
LEFT JOIN Comments c ON c.ParentID = a.ID
LEFT JOIN Votes v ON v.ParentID = a.ID
GROUP BY a.ID, a.Title
但是我的数据不好了。我错过了什么?
答案 0 :(得分:3)
SELECT
a.ID,
a.Title,
COUNT(DISTINCT c.ID) AS NumComments,
COUNT(DISTINCT v.id) AS NumVotes
FROM
Articles a
LEFT JOIN Comments c ON c.ParentID = a.ID
LEFT JOIN Votes v ON v.ParentID = a.ID
GROUP BY
a.ID,
a.Title
答案 1 :(得分:2)
SELECT id, title,
(
SELECT COUNT(*)
FROM comments c
WHERE c.ParentID = a.ID
) AS NumComments,
(
SELECT COUNT(*)
FROM votes v
WHERE v.ParentID = a.ID
) AS NumVotes
FROM articles a
答案 2 :(得分:0)
尝试: COUNT(DISTINCT c.ID)作为NumComments
答案 3 :(得分:0)
你正在思考树木,而不是记录集。
在记录集中,您获得每个评论,并且每个投票多次相互返回。运行没有group by和count的查询,看看我的意思。
解决方案很简单:使用COUNT(DISCTINCT c.ID)和COUNT(DISTINCT v.ID)