[英]How to get x number of rows for each unique column value in MySQL?
我有一个非常简单的表,这是值。
id photo_name user_id created_at
----------------------------------------------
144 Photo1 1 2014-05-01 09:30:15
143 Photo2 2 2014-05-01 10:30:15
142 Photo3 1 2014-05-01 11:30:15
141 Photo4 3 2014-05-01 12:30:15
140 Photo5 1 2014-05-01 13:30:15
139 Photo6 2 2014-05-01 14:30:15
139 Photo6 2 2014-05-01 14:30:15
预期结果
我想限制每个user_id 2张照片
id photo_name user_id created_at
----------------------------------------------
144 Photo1 1 2014-05-01 11:30:15
142 Photo3 1 2014-05-01 12:30:15
143 Photo2 2 2014-05-01 13:30:15
139 Photo6 2 2014-05-01 14:30:15
141 Photo4 3 2014-05-01 14:30:15
我尝试了几种方法,但无法获得理想的结果。 预先感谢您的帮助!
MySQL中最简单的方法是使用变量:
select id, photo_name, user_id, created_at
from (select p.*,
@rn := if(@uid = user_id, @rn + 1, 1) as rn,
@uid := user_id
from photos p cross join
(select @uid := -1, @rn := 0) var
order by user_id
) p
where rn <= 2;
使用标准SQL的另一种方法是:
select p.*
from photos p
where 2 >= (select count(*)
from photos p2
where p2.user_id = p.user_id and
p2.id <= p.id
);
子查询查询的作用是计算给定用户的照片数量。 p2.user_id = p.user_id
将查询限制为仅用户。 p2.id <= p.id
进行排序。 因此,用户的最低id
(本身)只有一个匹配项,并且计数为1
。 下一个具有两个匹配项-最低匹配项本身,因此值为2。依此类推。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.