0

次のような SQL クエリがあります。

SELECT member_id, Count(*) AS '# of Rounds'
FROM   score,cup_point
WHERE  session_id =?
       AND tour_id =?
       AND cup_point_id = `cup_point`.id
GROUP  BY member_id
ORDER  BY Sum(points) DESC
LIMIT  50 offset 0 

次のように、クエリにランキングを含めるにはどうすればよいですか。

  1. スコアに基づいた数値のリターン列を取得します。つまりSUM(points)、最高スコアのランキングは 1 などになります。
  2. オフセットと制限を使用してページ分割する場合、またはメンバー ID でフィルタリングする場合でも、そのメンバーの正しいランキングを取得できます ( member_id) ?

ありがとう。

4

1 に答える 1

1

おそらく、サブクエリと実行中のカウンターを使用して

SET @x = 0;
SELECT member_id,NumRounds AS '# of Rounds',@x:=(@x+1) Rank FROM
(
SELECT member_id, Count(*) AS NumRounds
FROM   score,cup_point
WHERE  session_id =?
       AND tour_id =?
       AND cup_point_id = `cup_point`.id
GROUP  BY member_id
ORDER  BY Sum(points) DESC
LIMIT  50 offset 0 
) A;

2012 年 6 月 8 日の DBA StackExchange で、このような問題に対処しました。

試してみる !!!

于 2013-01-03T22:20:52.553 に答える