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

MySQLで同じ重みのレコードをランク​​付けする方法

    ジョルゴスのフィドルを使って...

    SELECT name
         , marks
         , FIND_IN_SET(marks, (SELECT GROUP_CONCAT(marks ORDER BY marks DESC) FROM mytable)) rank
      FROM mytable;
    
    |     Name | Marks | rank |
    |----------|-------|------|
    | StudentA |    90 |    1 |
    | StudentB |    85 |    2 |
    | StudentC |    85 |    2 |
    | StudentD |    70 |    4 |
    

    http://sqlfiddle.com/#!9/7cc30/6

    または

    SELECT name, marks, rank
    FROM (SELECT name
         , marks
         , @prev := @curr
         , @curr := marks
         , @i:[email protected]+1 temp
         , @rank := IF(@prev = @curr, @rank, @i) AS rank
      FROM mytable
         , ( SELECT @curr := null, @prev := null, @rank := 0, @i:=0) vars
     ORDER 
        BY marks DESC,name
          ) x
          ORDER 
        BY marks DESC,name
    

    http://sqlfiddle.com/#!9/287e07/9



    1. SUM()、GROUP_BY()、およびLEFT_JOIN()を組み合わせると、誤った結果が返されます。修正方法は?

    2. CASEおよびGROUPBYを使用したピボットの動的な代替手段

    3. MySQLBLOBコンテンツをjson応答として送信する

    4. トリガーを起動したクエリの文字列を取得します