sql >> データベース >  >> RDS >> Mysql

MySQL:勝者を選択し、ランクを返します

    これで望ましい結果が得られると思います。対象の勝者が別の勝者とポイントを争う場合を適切に処理することに注意してください。 (どちらも同じ位置になります。)

    SELECT COUNT(*) + 1 AS Position
    FROM myTable
    WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')
    

    編集
    「プラグイン」したいIgnacio Vazquez-Abrams '答えは、いくつかの点で上記よりも優れています。
    たとえば、すべて(または複数)の勝者とその現在の位置を一覧表示できます。
    もう1つの利点は、より複雑な条件を表現できることです。特定のプレーヤーが別のプレーヤーよりも進んでいることを示します(以下を参照)。 incredimanを読む 「結びつき」がないという趣旨のコメントは、私にこれを調べるように促しました。クエリは、プレーヤーが同じポイント数を持っている状況を処理するために、次のようにわずかに変更できます(このようなプレーヤーには、以前は同じ位置値が与えられていましたが、現在は位置値が相対的な開始値にさらに関連付けられています)。

    SELECT w1.name, (
      SELECT COUNT(*)
      FROM winners AS w2
      WHERE (w2.points > w1.points) 
         OR (W2.points = W1.points AND W2.Start < W1.Start)  -- Extra cond. to avoid ties.
    )+1 AS rank
    FROM winners AS w1
    -- WHERE W1.name = 'Sally'   -- optional where clause
    


    1. LaravelデータベーススキーマのMediumBlob

    2. SQLビュー:SQLでビューを操作する方法は?

    3. 接続を確認するときに、指定されたMySQLホストのいずれにも接続できません

    4. filesortを使用してMySQLの日時列で並べ替える