所以我一直在处理最大的每组标签下的所有问题,要么我不明白我正在阅读什么,或者到目前为止什么都不符合我的需求。 This link也提供了很多有用的信息,但仍然没有答案。
所以我有一个包含以下字段的表:
我认为我的问题偏离了常见的最大n组问题,因为我不需要每个组的最大N.我需要X组的最大N记录。
因此,我需要获得最高兴趣的X类别(简单,GROUP BY类别ORDER BY兴趣,LIMIT X)。然后我需要获得每个类别中得分最高的N条记录。
我的查询如何查找这样的内容?
很抱歉,如果这真的是每个其他每个最大n组问题的重复,我只是不明白它们是如何工作的。如果是这样,请随意关闭。
Per @ tehshrike的推文,这里有更多的信息。
真正发生的事情是我的用户拥有许多不同interest
的{{1}}。我想生成原始用户categories
所在score
中categories
位置最高的用户列表。
所以我正在寻找的一件事是:
用户1最多interested
的4 score
中categories
位置最高的15位用户。
对于特定用户ID ,查找前X个类别(对该特定用户感兴趣最高)和那些(X类别)查找前N个用户(这些类别的得分最高)。
答案 0 :(得分:1)
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
答案 1 :(得分:0)
您可能想要编写groupwise-max查询,然后通过JOIN加入以下内容来限制它:
JOIN
(
SELECT category
FROM your_table
ORDER BY interest
LIMIT 10
) AS just_get_these_categories ON just_get_these_categories.category = your_table.category
(假设该类别是您表中的候选键)
编辑:基于进一步的问题,它看起来像你想要的是不可能的。 (见:chatlog)