mysql返回最大n个具有相同值的行

Posted

技术标签:

【中文标题】mysql返回最大n个具有相同值的行【英文标题】:mysql return max n amount of rows with same value 【发布时间】:2021-01-01 04:20:58 【问题描述】:

我有一个 wordpress 数据库,我想只选择 5 行(帖子)具有相同元值的行。这意味着如果我有 100 个帖子,其中每 20 个具有相同的元值,我会得到 5 次 5 行具有相同元值的帖子。

SELECT * FROM `wp_posts` a, `wp_postmeta` b WHERE a.ID = b.post_id AND b.meta_key = 'mykey' AND a.post_type='code' AND a.post_status='publish' LIMIT DISTINCT(meta_value) 5

当然 LIMIT DISCINCT(meta_value) 5 是不可表示的,但它表明每个 meta_value 我只希望有 5 行。

我怎样才能简单地解决这个问题?

【问题讨论】:

样本数据对您的问题有很大帮助。 【参考方案1】:

如果您运行的是 mysql 8.0,则可以使用窗口函数。但是,您需要一个定义帖子元排序的列:

select * 
from wp_posts p
inner join (
    select pm.*, row_number() over(partition by post_id order by id desc) rn
    from wp_postmeta
    where b.meta_key = 'mykey'
) pm on p.id = pm.post_id and pm.rn <= 5
where p.post_type = 'code' and p.post_status = 'publish' 

【讨论】:

以上是关于mysql返回最大n个具有相同值的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中删除具有几个相同值的行?

查询以返回在所有行中对于一列的每个不同值具有相同值的行值

计算具有3个列值的行的出现次数相同的MySQL

我不能在列中添加具有 2 个相同值的行

连接具有相同值的行的列值(不同列的)

在保留列的同时计算具有相同值的行