두 개의 테이블이 있다고 가정합니다. 기사 및 의견.sql - left join - count
난 기사 테이블에서 열을 선택하고 때, 나는 또한 ... 같은 select 문에있는 문서에 대한 의견의 수를 선택합니다
방법 (두 테이블 사이의 공통 필드 가정은은 articleID입니다) 나는 그것을합니까? 나는 그것을 끝낼 수는 있지만, 내 길은 효율적 일지 모르겠다. 그래서 나는 올바른 길을 배우고 싶다.
두 개의 테이블이 있다고 가정합니다. 기사 및 의견.sql - left join - count
난 기사 테이블에서 열을 선택하고 때, 나는 또한 ... 같은 select 문에있는 문서에 대한 의견의 수를 선택합니다
방법 (두 테이블 사이의 공통 필드 가정은은 articleID입니다) 나는 그것을합니까? 나는 그것을 끝낼 수는 있지만, 내 길은 효율적 일지 모르겠다. 그래서 나는 올바른 길을 배우고 싶다.
사용 : 당신이 ARTICLES
테이블에서 원하는 무엇이든 열
SELECT a.articleid,
COUNT(*) AS num_comments
FROM ARTICLES a
LEFT JOIN COMMENTS c ON c.articleid = a.articleid
GROUP BY a.articleid
, 당신은 그들이 때문에 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
'le dorfier'는 정확합니다.이 쿼리는 SQL Server에서 그대로 실행되지 않습니다. –
네, 참으로 ... 일하러 편집했습니다 ... –
그룹 기준은 설명 테이블에서만 수행되므로이 방법이 더 효율적입니다.
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 절에서 100s (100s가 아닌 많은 수의 열) 쿼리를 작성하는 것을 보았습니다. 그래서 하위 쿼리를 사용하여 솔루션을 게시했습니다. – JonH
@JonH : SQL Server (다른 DB 중)와 유사한 기능을 사용하면 분석 함수를 사용하지 않는 한 집계 함수로 래핑되지 않은 열을 나열하거나 반환 할 수 없습니다 (분석 함수를 사용하지 않는 한). GROUP BY 절을 생략하면 ** 제공되는 내용에 따라 SQL Server에서 오류가 발생합니다 **. MySQL은 이러한 기능을 지원하는 유일한 DB이며 비표준입니다 : http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html –
그 점을 알고 있습니다. 많은 사람들이 그룹 별 및 집계 방식이 어떻게 작동하는지 이해하지 못했습니다. 사람들이 올바른 결과라고 생각하는 것을 얻기 위해 100 개의 항목으로 그룹화하는 것을 보았습니다. – JonH