mysql - 选择 X 组中最大的 N 条记录

标签 mysql grouping greatest-n-per-group

所以我一直在 greatest-n-per-group 标签下浏览所有问题,要么我不明白我在读什么,要么到目前为止没有什么能满足我的需要。 This link也提供了很多有用的信息,但仍然没有答案。

所以我有一个包含以下字段的表:

  • id(唯一整数)
  • 用户 ID(整数)
  • 类别(可变字符)
  • 分数(整数)
  • 兴趣(整数)

我相信我的问题偏离了常见的每组最大 N 问题,因为我不需要每个 组的最大 N。我需要 X 组的最大 N 条记录。

因此,我需要获得兴趣最高的 X 个类别(简单,GROUP BY category ORDER BY interest,LIMIT X)。然后我需要为每个类别获得最高分的 N 条记录。

我的查询将如何查找这样的内容?

抱歉,如果这真的是每个其他 greatest-n-per-group 问题的重复,我只是不明白它们是如何工作的。如果是这样,请随时关闭它。

更新:

根据@tehshrike 的提示,这里有更多信息。

真正发生的事情是我的用户对许多不同的类别感兴趣。我想生成一个在原始用户感兴趣类别中具有最高分数的用户列表。

所以我正在寻找的一个可能的事情是:

用户 1 最感兴趣的 4 个类别得分最高的 15 位用户。


对于特定 user_id,找到前 X 个类别(对该特定用户最感兴趣),并为那些(X 个类别)找到前 N 个用户(在这些类别中得分最高)。

最佳答案

SELECT catX.category
       catX.interest
       t1.user_id
       t1.score
FROM 
    ( SELECT category 
           , interest 
      FROM tableX 
      WHERE user_id = @user_id_we_are_interested_in     --- specific user 
      ORDER BY interest DESC
      LIMIT @X                         --- top @X categories per specific user 
    ) AS catX 
  JOIN 
    tableX AS t1 
      ON t1.category = catX.category 
  LEFT JOIN 
    tableX AS t2 
      ON  t2.category = t1.category 
      AND t2.score > t1.score 
  GROUP BY t1.category
         , t1.user_id
  HAVING COUNT(t2.score) < @N                      --- top @N users per category 
  ORDER BY catX.interest DESC 
         , t1.score DESC 

关于mysql - 选择 X 组中最大的 N 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602398/

相关文章:

php - 如何正确创建 SQL 查询以显示指定结果的每个细化条件中的产品数量

mysql - 当我尝试运行代码时,引用的字符串未正确终止

php - 在第一个空间上拆分字符串数组,并按第一个单词进行新数组分组

应用分组时 WPF 项目不可见

mysql - 从 MySQL 表中选择 10 条具有唯一作者的最新评论

mysql - 检索每组中的最后一条记录 - MySQL

mysql - 帮助使用 perl dbi 和 mysql 查询远程数据库

mysql - 当时间以分钟为单位存储时,获取以小时为单位的总时间?

linux - Linux 服务器的一个文件夹中应该允许多少个文件供用户上传?

mysql - 尝试选择最大列学年