获得TOP5,但来自不同的团体

时间:2014-08-07 16:28:25

标签: mysql group-by

简单的任务。我有博客系统,我需要获得TOP5(通过观点)的帖子,但来自不同的作者(例如,如果一个作者非常受欢迎,我不需要他们的所有五个帖子。)

如果首先选择TOP5作者然后从每个作者中选择最受欢迎的帖子,那么可以轻松完成。但问题是:它可以在一个查询中完成吗?

1 个答案:

答案 0 :(得分:2)

假设你有一个auto_increment id:

  SELECT p1.* 
    FROM posts p1
    JOIN (
       SELECT p2.author, p2.views, MAX(p2.id) author_max_id
         FROM posts p2
         JOIN (
         SELECT p3.author, MAX(p3.views) author_max_views
           FROM posts p3
       GROUP BY p3.author
       ORDER BY author_max_views
          LIMIT 5 
              ) pii
           ON p2.author = pii.author
          AND p2.views = pii.author_max_views
     GROUP BY p2.author, p2.views
     ORDER BY p2.views
        LIMIT 5
         ) pi
      ON p1.author = pi.author
     AND p1.views = pi.views
     AND p1.id = pi.author_max_id
ORDER BY p1.views
   LIMIT 5;

我不得不双重嵌套,以避免作者有多个帖子,其中有一个视图=该作者的最大观看次数。

这可以改写为更简单的东西......例如,你在两个子查询中不需要ORDER BY x LIMIT 5,但我希望它们能加速查询。