繁体   English   中英

如何在MySQL中为每个唯一列值获取x行数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM