1

http://jimmod.com/blog/2008/09/displaying-row-number-rownum-in-mysql/からのクエリについて質問があります。

SELECT IF(@points=p.points, @rownum, @rownum:=@rownum+1) rank, 
       p.*, (@points:=p.points) dummy 
FROM `ranking` p, (SELECT @rownum:=0) x, (SELECT @points:=0) y 
ORDER BY `points` DESC

クエリの結果は次のとおりです。

rank user_id name score
-----------------------
1      4    Barney  100
2      2    Ted      88
3      1    Marshall 76
3      3    Robin    76
4      5    Lily     68

ユーザー ID に基づいて同じランク結果を得るにはどうすればよいですか?

以下のクエリはユーザー ID に基づいていますが、Robin のランクは 3 ではなく 4 になります。

SELECT rank FROM (SELECT @rownum:=@rownum+1 rank, p.* 
FROM `ranking` p, (SELECT @rownum:=0) r 
ORDER BY `points` DESC) a WHERE a.user_id = 3
4

1 に答える 1

1

それをテストせずに、これはサブクエリを使用して動作するはずです:

SELECT rank
FROM (
    SELECT IF(@points=p.points, @rownum, @rownum:=@rownum+1) rank, 
       p.*, (@points:=p.points) dummy 
    FROM `ranking` p, (SELECT @rownum:=0) x, (SELECT @points:=0) y 
    ORDER BY `points` DESC
) t
WHERE user_id = 3

RANK ではなく ROW NUMBER のみを使用しているため、上記のクエリは 4 を表示し、Robin は Marshall の後に表示されます (スコアは同じですが)。

幸運を。

于 2013-02-08T05:05:11.113 に答える