0

我有下表:

ID   Category_ID  Score  Name
1    1            60     Name_1
2    1            50     Name_2
3    2            40     Name_3
4    3            30     Name_4
5    4            10     Name_5

假设我运行以下查询:

SELECT * from table ORDER BY Score DESC LIMIT 0, 2

这将带给我:

ID   Category_ID  Score  Name
1    1            60     Name_1
2    1            50     Name_2

如何避免在我的结果中重复 Category_ID(尽可能多),但将 ORDER BY 分数作为第一个条件。例如,我怎样才能得到以下内容:

ID   Category_ID  Score  Name
1    1            60     Name_1
3    2            40     Name_3   <-- Following higher score with different Category_ID

并且对于

SELECT * from table ORDER BY Score DESC LIMIT 1, 2预期结果是:

ID   Category_ID  Score  Name
2    1            50     Name_2
4    3            30     Name_4 

SELECT * from table ORDER BY Score DESC LIMIT 2, 2 预期结果是:

ID   Category_ID  Score  Name
5    4            10     Name_5

谢谢!

4

1 回答 1

0

您只需要选择所需的 ID。这将需要连接回原始表。这个版本给出了最小 id 的结果:

select t.*
from t join
     (select category_id, min(id) as minid
      from t
      group by category_id
     ) tsum
     on t.id = tsum.minid
order by max_score
limit 0, 2

如果您想要最高分,请改为:

select t.*
from t join
     (select category_id, max(score) as maxscore
      from t
      group by category_id
     ) tsum
     on t.category_id = tsum.category_id and
        t.score = tsum.maxscore
order by max_score
limit 0, 2

当然,这是假设最高分数只出现在一条记录上。

于 2012-12-10T18:51:04.790 回答