2011-02-28 7 views
1

다음 테이블이 있습니다. 블로그 (id) 및 게시물 (id, blog_id, comment_count) 다른 블로그에서 5 개의 댓글이 가장 많이 달린 게시물을 선택해야합니다. 함수로하는 것은 꽤 쉽지만, 기본적인 SQL을 사용하는 것이 가능합니까?SQL 쿼리에 대한 도움말

여기에 희망이 당신이 필요로하는 무엇 SQL 서버 방언

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 개인 블로그가 필요합니까? –

답변

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

+0

각 블로그마다 최대 5 개의 게시물이 필요합니다. 맞습니까? – a1ex07

+0

총 5 개의 게시물이 필요합니다. – synapse

0

는 지금까지 내가 아는 한, 실제로 주요 DBMS에서 지원 Select Top를 구현하는 표준 방법이 없습니다.

comparison of SQL dialects