所以我一直在 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/