mysqlテーブルにランクを付ける必要があります。マークが45、55、55、65、75のテーブル名テストがあるとすると、75はランク1になります。
元のテーブル
name marks
tom 55
joe 56
sally 57
必要な結果
name marks rank
tom 55 3
joe 56 2
sally 57 1
ユーザーをマークで並べ替えてから、その位置をカウントする必要があります。これは、次の方法で行うことができます。
SET @rownum := 0;
SELECT @rownum := @rownum+1 AS rank, name, marks
FROM your_table
ORDER BY marks DESC
このクエリを試してください -
SELECT t.* FROM (
SELECT t1.*, @r:=@r+1 rank FROM (SELECT * FROM table ORDER BY marks DESC) t1,
(SELECT @r:=0) t2
) t
ORDER BY marks
私はやや同じ質問をしましたが、答えは同じです。
ご不明な点がございましたら、お知らせください。
テーブルクエリの場合は次のようになります
SELECT name, marks,
(SELECT COUNT(distinct u2.marks) FROM myTable u2
WHERE
u2.marks > u1.marks) + 1 AS rank FROM myTable u1
ORDER BY rank DESC
このクエリmyTable
では、テーブル名に置き換えます。
また、結果、ランク3のメモ。
ランク 4 ではなくランク 5 が必要な場合は、COUNT(*)
代わりに を使用しCOUNT(distinct u2.marks)
ます。