【问题标题】:Select top 3 viewed images of every user from a table从表中选择每个用户的前 3 个查看图像
【发布时间】:2023-03-29 10:43:01
【问题描述】:

我知道此类问题已被多次询问,但我无法为我的问题找到一个好的答案。 我试图从表中获取每个人的前 3 条查看记录。

我的表

id    user_id     views
1       5          6
2       5          3
3       6          5  
4       7          4  
5       9          14  
6       5          3
7       5          8
8       6          7
9       7         15
10      9         13
11      9         13  
12      9         18
13      6          8
14      8          0

结果

id      user_id    views
12       9          18
9        7          15
5        9          14
10       9          13
13       6          8
7        5          8
8        6          7
1        5          6
3        6          5
4        7          4
2        5          3
14       8          0

我点击了这个链接http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

我的查询

select *
from mytable
where (
   select count(*) from mytable as f
   where f.user_id = mytable.user_id and f.views >= mytable.views
) < 4 order by user_id desc;

但是这个查询没有获取那些视图相等的记录。 请指出正确的方向。

【问题讨论】:

  • 我不清楚你的问题。但是,您可以通过此查询简单地获得结果(您在帖子中提到)...SELECT * FROM mytable ORDER BY views DESC
  • @TunZarniKyaw 差不多。 [10, 9, 13] 和 [11, 9, 13 ] 不在结果集中。
  • @TunZarniKyaw,我试图从表中仅获取每个用户的 3 条浏览次数最多的记录。以上只是示例数据,有多个用户条目。我只需要每个用户的 3 条观看次数最多的记录。
  • @TarynEast, [10, 9, 13] 或 [11, 9, 13] 我需要其中任何一个,而不是两者都需要
  • MySQL 缺少使这变得容易的分析函数,但有一些选项:xaprb.com/blog/2006/12/07/…

标签: mysql sql select group-by limit


【解决方案1】:

试试这个:

SELECT id, user_id, views 
FROM (SELECT IF(@lastUserId = @lastUserId:=t.user_id, @ID:=@ID+1, @ID:=1) AS userNo, 
                 t.id, t.user_id, t.views
        FROM mytable t, (SELECT @ID:=0, @lastUserId:=0) A 
        ORDER BY t.user_id, t.views DESC
      ) AS A 
WHERE userNo <= 3 
ORDER BY views DESC

查看SQL FIDDLE DEMO

输出

| ID | USER_ID | VIEWS |
|----|---------|-------|
| 12 |       9 |    18 |
|  9 |       7 |    15 |
|  5 |       9 |    14 |
| 10 |       9 |    13 |
|  7 |       5 |     8 |
| 13 |       6 |     8 |
|  8 |       6 |     7 |
|  1 |       5 |     6 |
|  3 |       6 |     5 |
|  4 |       7 |     4 |
|  2 |       5 |     3 |
| 14 |       8 |     0 |

【讨论】:

  • 此查询仅获取一个用户的记录。我需要拥有 3 条浏览次数最多的记录的所有用户。感谢您的帮助。
猜你喜欢
  • 2011-03-09
  • 2012-07-29
  • 1970-01-01
  • 2010-10-09
  • 2016-12-08
  • 1970-01-01
  • 2023-01-24
  • 2011-07-01
  • 2021-10-04
相关资源
最近更新 更多