2011-02-28 105 views
1

我有以下表博客(ID)和帖子(ID,blog_id,comment_count) 我需要从不同的博客中选择五个最多评论的职位。使用函数很容易,但是可以使用某种基本的SQL吗?帮助SQL查询

下面是在SQL Server方言

select top 5 top_post.* from Blogs b 
cross apply 
    (select top 1 * from Posts p 
    where p.blog_id = b.id 
    order by p.comment_count) top_post 
order by top_post.comment_count 
+0

实际上,您需要5个博客,并且我认为有顶级评论文章吗? – 2011-02-28 09:21:05

回答

0
SELECT b.*, c.num_comments 
FROM 
(
    SELECT TOP 5 blog_id, SUM(comment_count) as num_comments 
    FROM posts GROUP BY blog_id ORDER BY SUM(comment_count) DESC 
)c 
INNER JOIN Blogs b ON (b.id = c.blog_id) 

UPDATE查询希望这是你所需要的。虽然它不是很快。

SELECT b.*, c.comment_count 
FROM 
(SELECT blog_id, comment_count , 
ROW_NUMBER() OVER(PARTITION by blog_id ORDER BY comment_count DESC) as rnum 
FROM posts 
)c 
INNER JOIN Blogs b ON (b.id = c.blog_id) 
WHERE c.rnum <=5; 
+0

这将获得大多数评论博客,但我需要职位。 – synapse 2011-02-28 09:29:39

+0

因此,每个博客最多需要5个帖子,对吧? – a1ex07 2011-02-28 09:32:33

+0

我需要5个帖子。 – synapse 2011-02-28 09:41:24