繁体   English   中英

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

[英]Selecting Greatest N records in X groups

因此,我一直在按“每人最多”标签进行所有问题的解答,或者我听不懂我正在阅读的内容,或者到目前为止没有任何内容可以满足我的需求。 该链接还提供了许多有用的信息,但仍然没有答案。

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

  • id(唯一整数)
  • user_id(int)
  • 类别(varchar)
  • 得分(整数)
  • 利息(整数)

我认为我的问题与常见的每组最多n个问题相去甚远,因为我不需要每个组中都有最大的n。 我需要X组的最大N条记录。

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

我的查询将如何寻找这样的东西?

抱歉,如果这确实是其他每组“每人最多”的问题的重复,我只是不了解它们的工作原理。 如果是这样,请随时关闭。

更新:

根据@tehshrike的建议,以下是更多信息。

确实发生了什么,我的用户interest许多不同的categories interest 我想生成一个原始用户interestedcategoriesscore最高的用户列表。

因此,我要寻找的一件事可能是:

用户1最interested的4个categoriesscore最高的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 

您可能想要编写您的groupwise-max查询,然后通过JOINing这样的方式来限制它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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