IDと値を持つテーブルがあります。テーブルの要素をその値で降順でランク付けするにはどうすればよいですか? 私がやりたいことは次のとおりです。
SELECT id FROM table ORDER BY value DESC
そして、たとえばid = 4の位置を教えてほしい
答えてくれてありがとう!
MySQL には分析関数がないため、ユーザー変数を使用する必要があります。
SELECT @r:=@r+1 AS rank, id
FROM table, (SELECT @r:=0) init
ORDER BY value DESC
特定のレコードのランクを取得するには、外側のクエリでラップします。
SELECT rank FROM (
SELECT @r:=@r+1 AS rank, id
FROM table, (SELECT @r:=0) init
ORDER BY value DESC
) t WHERE id = 4
MySQL がテーブル内のすべてのレコードのランクを不必要に計算するのを防ぐために、フィルターを追加できます。
SELECT rank FROM (
SELECT @r:=@r+1 AS rank, table.id
FROM table,
(SELECT value FROM table WHERE id=4) t,
(SELECT @r:=0) init
WHERE table.value >= t.value
ORDER BY table.value DESC
) t WHERE id = 4
Eggyal の解決策は ではなく ですrank
(row_number
これらは SQL 標準の一部であるため、実際には意味があります)。
dense_rank
MySQLでは次のようにすると思います:
SELECT @r:=@r+1 AS rank, id
FROM (select id, count(*) as cnt
from table t
group by id
),
(SELECT @r:=0) init
ORDER BY value DESC
Arank
は少し難しいです。. . 私は次のことがうまくいくと思います:
SELECT @r:=@r+1-offset AS rank, id
FROM (select id, count(*) as cnt
from table t
group by id
),
(SELECT @r:=0, count(*)-1 as offset
from table t
group by id
order by count(*) desc
limit 1
) init
ORDER BY value DESC