sql - 左连接 - 计数

TPR*_*TPR 8 sql t-sql sql-server join

假设我有两张桌子.文章和评论.

当我从articles表中选择列时,我还想在同一个select语句中选择文章的注释数...(假设这两个表之间的公共字段是articleid)

我怎么做?我可以完成它,但我不知道我的方式是否有效,所以我想学习正确的方法.

JBr*_*oks 12

这应该更有效,因为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
Run Code Online (Sandbox Code Playgroud)


Gab*_*oli 5

这个应该可以。。

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
Run Code Online (Sandbox Code Playgroud)

  • 你可能想要一个 GROUP BY。如果有人担心,如果没有加入的记录,这将正确返回 0。 (3认同)

OMG*_*ies 5

使用:

   SELECT a.articleid, 
          COUNT(*) AS num_comments
     FROM ARTICLES a
LEFT JOIN COMMENTS c ON c.articleid = a.articleid
 GROUP BY a.articleid
Run Code Online (Sandbox Code Playgroud)

无论您要从ARTICLES表中获取什么列,都必须在GROUP BY子句中进行定义,因为它们没有对它们执行的聚合函数。

  • 仅仅添加group by并不总是最好的事情。我看到人们在group by子句中用100s(不是100s,而是很多)列写查询,因为他们不知道如何正确使用聚合。这就是为什么我使用子查询发布解决方案的原因。 (2认同)