假設我有兩個表。文章和評論。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