如何在MySQL中为每个类别选择3行?

时间:2016-12-03 14:49:49

标签: mysql group-by aggregate

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

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

我写的是

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

我可以将另外2个查询放入union union中,但它会使查询变得很大。在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

1 个答案:

答案 0 :(得分:7)

您可以阅读每个类别的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

<强>输出:

enter image description here