假设我有两个表。文章和评论。sql - 左连接 - 计数
,当我选择从文章表列,我也希望选择在同一SELECT语句中的文章评论数...(假设这两个表之间的公共领域是articleID)可以
如何我要这样做吗?我可以完成它,但我不知道我的方式是否有效,所以我想学习正确的方法。
假设我有两个表。文章和评论。sql - 左连接 - 计数
,当我选择从文章表列,我也希望选择在同一SELECT语句中的文章评论数...(假设这两个表之间的公共领域是articleID)可以
如何我要这样做吗?我可以完成它,但我不知道我的方式是否有效,所以我想学习正确的方法。
用途:
SELECT a.articleid,
COUNT(*) AS num_comments
FROM ARTICLES a
LEFT JOIN COMMENTS c ON c.articleid = a.articleid
GROUP BY a.articleid
您从ARTICLES
表想要的任何列,你必须,因为他们的GROUP BY
子句中定义没有对它们执行集合功能。
SELECT
a.Article,
a.ArticleID,
t.COUNTOFCOMMENTS
FROM
Article a
LEFT JOIN
Comment c
ON c.ArticleID=a.ArticleID
LEFT JOIN
(SELECT ArticleID, COUNT(CommentID) AS COUNTOFCOMMENTS FROM Comments GROUP BY ArticleID) t
ON t.ArticleID = a.ArticleID
这应该做到这一点..
SELECT
article_column_1, article_column_2, count(ct.articleid) as comments
FROM
article_table at
LEFT OUTER JOIN comment_table ct ON at.articleid = ct.articleid
GROUP BY
article_column_1, article_column_2
你可能想要一个GROUP BY。 如果有人关心,如果没有连接的记录,这将正确返回0。 – dkretz 2010-02-07 03:25:29
'le dorfier'是正确的 - 此查询不会按原样在SQL Server上运行。 – 2010-02-07 03:41:24
是的,确实球员......编辑工作.. – 2010-02-07 03:49:50
这应该更有效,因为group by只在Comment表上完成。
SELECT
a.ArticleID,
a.Article,
isnull(c.Cnt, 0) as Cnt
FROM Article a
LEFT JOIN
(SELECT c.ArticleID, count(1) Cnt
FROM Comment c
GROUP BY c.ArticleID) as c
ON c.ArticleID=a.ArticleID
ORDER BY 1
-- Working Syntax example from my environment changed to fit this context.
SELECT a.article
,A.articleid
,(
SELECT Count(B.articleid)
FROM dbo.comment AS B
WHERE A.articleid = B.articleid
) AS comment#
,(
SELECT Count(C.articleid)
FROM dbo.comments AS C
WHERE A.articleid = C.articleid
) AS comments#
FROM dbo.article AS A;
只需添加组并不总是最好的事情。我发现人们在group by by语句中使用100s(好的不是100s,但是很多)列写查询,因为他们不知道如何正确使用聚合。这就是我使用子查询发布解决方案的原因。 – JonH 2010-02-07 03:32:37
@JonH:SQL Server(和其他DB)类似的将不允许您列出/返回未包含在聚合函数中的列(除非使用分析函数)而无需在“GROUP BY”子句中定义它们。如果您省略了GROUP BY子句,则**将根据提供的内容**在SQL Server上收到错误。 MySQL是唯一支持这种功能的数据库,它是非标准的:http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html – 2010-02-07 03:39:59
我知道我的观点很多人不明白团体和团体是如何工作的。我已经看到人们将100多列组合起来,以获得他们认为可能是正确结果的内容。 – JonH 2010-02-07 18:46:41