2

IDと値を持つテーブルがあります。テーブルの要素をその値で降順でランク付けするにはどうすればよいですか? 私がやりたいことは次のとおりです。

SELECT id FROM table ORDER BY value DESC

そして、たとえばid = 4の位置を教えてほしい

答えてくれてありがとう!

4

2 に答える 2

2

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
于 2012-10-18T16:44:34.410 に答える
1

Eggyal の解決策は ではなく ですrank(row_numberこれらは SQL 標準の一部であるため、実際には意味があります)。

dense_rankMySQLでは次のようにすると思います:

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
于 2012-10-18T17:45:29.310 に答える