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を(可能な限り)繰り返して、最初の条件としてORDERBYスコアを使用しないようにするにはどうすればよいですか。たとえば、代わりに次を取得するにはどうすればよいですか。

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

もちろん、これは最大スコアが 1 つのレコードにのみ表示されることを前提としています。

于 2012-12-10T18:51:04.790 に答える