2009-05-31 93 views
3

假设我想选择所有博客文章的ID,然后计算与该博客文章相关的评论数量,如何使用GROUP BY或ORDER BY以便返回的列表按评论数量的顺序排列每个帖子?SQL加入和计数不能正确分组?

我有这个查询返回的数据,但不是我想要的顺序?通过品牌更改组无差异:

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中,至少,除非您从posts表中提取更多数据,否则不需要连接。随着加入:

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) 
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,计数(c.comment_ID)从wp_posts p ccount,wp_comments c其中p.ID = c.comment_post_ID GROUP BYç .comment_ID ORDER BY ccount DESC; ^^只是返回所有的计数为1(他们绝对不是全部1).. – 2009-05-31 22:49:44

+0

哦,它工作时,我做了p.ID组.. – 2009-05-31 22:52:13

0

大概有上的评论表中没有相关数据,所以请尽量通过后ID分组它,请学会JOIN声明,这是非常有益的,能产生更好的结果

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查询的旅程:)