开发者

SQL query: select five most commented posts from different blogs

开发者 https://www.devze.com 2023-02-14 07:54 出处:网络
I have a following tables Blogs(id) and Posts(id, blog_id, co开发者_如何学运维mment_count) I need to select five most commented posts from different blogs. It\'s quite easy to do with a function, but

I have a following tables Blogs(id) and Posts(id, blog_id, co开发者_如何学运维mment_count) I need to select five most commented posts from different blogs. It's quite easy to do with a function, but is it possible to do with some kind of basic SQL?

Here's the query in SQL Server dialect

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


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 Hopefully it's what you need. It's not very fast though.

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;


As far as I know, there is no standard way to implement Select Top which is actually supported by the major dbms.

See the comparison of SQL dialects

0

精彩评论

暂无评论...
验证码 换一张
取 消