2

mysqlランキングに関する別の質問を投稿して申し訳ありませんが、すでに見たすべての質問と回答は役に立ちませんでした....

ユーザーポイントのmysqlテーブルがあります。ユーザーはより多くの結果を得ることができます。私の目標は、ユーザーとそのランクから最大の結果を得ることです。

CREATE TABLE results
(`user_id` int, `points` int);

INSERT INTO results VALUES
(1,10),
(2,20),
(3,20),
(4,30),
(4,60),
(5,5),
(1,80);

したがって、上位のソリューションは次のようになります。

rank | user_id | points
 1        1        80
 2        4        60
 3        3        20
 3        2        20
 4        5        5
4

2 に答える 2

0

各ユーザーの最大値を計算する集計されたエイリアス クエリから選択するときに、ユーザー定義変数を使用してランクを生成します。

select
    (@rank := ifnull(@rank, 0) + 1) as rank,
    user_id,
    points
from (select
    user_id,
    max(points) as points
    from results
    group by 1
    order by 2 desc) x

参考までに、UDV は null として開始されるため、ifnull()呼び出しが行われます。

于 2013-06-05T07:16:20.297 に答える