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

我有一个包含大量数据的表,它有一个类别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

解决方法:

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

输出:

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

上一篇:sql – 如何找到列相等的行?


下一篇:每行mysql的列的聚合值