【问题标题】:How to select 3 row per category in MySQL?如何在 MySQL 中为每个类别选择 3 行?
【发布时间】:2016-12-03 14:49:49
【问题描述】:

我有一个包含大量数据的表,它有一个类别 ID 和 postId,我需要为每个类别读取 3 个具有相同 CatID 的新帖子。

这不是其他人提出的问题的重复。请检查在我的问题中,postid catid 可以是任何重复的问题,它在运行查询之前计算。

我写的是

SELECT
    MAX(` postid `) AS p1,
    ` catid ` AS c1
FROM
    ` postcategory `
GROUP BY
    ` catid

我可以将另外 2 个查询放在 union distinct 中,但它会使查询变得很大。在 MySQL 中有什么好的方法可以做到这一点。我正在寻找的阅读 3 postId(最大)属于同一类别。

postId   catId  
------  --------
     9         3
    15         3
    16         3
    17         3
    18         3
    19         5
    20         8
    21         6
    22         8
    23         6
    46         6
    46         8
    26         3
    25         3
    27         5
    28         3
    37         6
    39        10
    40         6
    41         6
    42         6
    43         6
    44         5
    45        11
    63         6
    64         5
    65         6
    66         6
    68         6

【问题讨论】:

标签: mysql group-by aggregate


【解决方案1】:

您可以使用以下查询从每个类别中阅读 3 篇新帖子。

SELECT
    p1.postId,
    p1.catId
FROM
    postcategory p1
JOIN postcategory p2 ON p1.catId = p2.catId
AND p2.postId >= p1.postId
GROUP BY
    p1.postId,
    p1.catId
HAVING
    COUNT(*) <= 3
ORDER BY
    catId,
    postId

在这里你可以看到Live Demo

输出:

【讨论】:

  • 您好@Faisal,我删除了 postcategory 表,现在所有类别都直接存储在 post 表中。请检查这个pastebin.com/wy47Midj
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多