2009-05-31 4 views
3

그럼 내 블로그 게시물의 ID를 모두 선택한 다음 해당 블로그 게시물과 연결된 댓글의 개수를 선택한다고 가정 해 보겠습니다. GROUP BY 또는 ORDER BY를 사용하여 반환 된 목록이 댓글 수 게시물 당?SQL 결합 및 개수가 GROUP BY를 올바르게 수행 할 수 없습니까?

내가 원하는 순서대로 데이터를 반환하는이 쿼리가 있습니까? 차종에 의해 차이 그룹을 변경하지 :

SELECT p.ID, count(c.comment_ID) 
FROM wp_posts p, wp_comments c 
WHERE p.ID = c.comment_post_ID 
GROUP BY c.comment_post_ID; 

답변

4

을 나는 사전 SQL92 구문에 익숙하지 않은, 그래서 내가 잘 알고 있어요 방식으로 그것을 표현합니다 :

SELECT c.comment_post_ID, COUNT(c.comment_ID) 
FROM wp_comments c 
GROUP BY c.comment_post_ID 
ORDER BY COUNT(c.comment_ID) -- ASC or DESC 

어떤 데이터베이스 엔진을 사용하고 있습니까? SQL Server에서는 최소한 게시물 테이블에서 더 많은 데이터를 가져 오지 않는 한 조인 할 필요가 없습니다. 조인으로 :

SELECT p.ID, COUNT(c.comment_ID) 
FROM wp_posts p 
JOIN wp_comments c ON c.comment_post_ID = p.ID 
GROUP BY p.ID 
ORDER BY COUNT(c.comment_ID) 
+0

그게 제가 가지고 놀 수있는 가장 쉬운 예제였습니다. 내 머리를 조인 + 카운트 (그것은 MySQL의 5.x) –

+0

이해. 조인으로 내 대답을 확장했습니다. –

3
SELECT p.ID, count(c.comment_ID) AS [count] 
FROM wp_posts p, wp_comments c 
WHERE p.ID = c.comment_post_ID 
GROUP BY c.comment_post_ID; 
ORDER BY [count] DESC 
+0

선택 p.ID, wp_posts 피에서 ccount AS wp_comments에 c (c.comment_ID)를 계산 곳 p.ID = c.comment_post_ID C 군에 의해 상황의 종류를 발생 .comment_ID ORDER BY ccount DESC; ^^ 그냥 모든 수를 1로 반환합니다. (그들은 모두 1이 아닙니다.) –

+0

p.ID로 그룹을 만들었을 때 오 그랬습니다. –

0

아마 코멘트 테이블에는 관련 데이터가 없기 때문에 포스트 ID하여 그룹화보십시오, 배우십시오 문을 가입, 매우 유용하고 생산하고 더 나은 결과

SELECT p.ID, count(c.comment_ID) 
FROM wp_posts p 
LEFT JOIN wp_comments c ON (p.ID = c.comment_post_ID) 
GROUP BY p.ID 

나는 또한 나의 SQL 쿼리 여행 :

관련 문제