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

1対多のテーブルでのユーザーのランキングのクエリ

    SELECT u.id,total_score,
     ( SELECT COUNT(*) FROM
        (SELECT u1.id, (IFNULL(u1.freebee,0)+ IFNULL(SUM(score),0)) as total_score
         FROM users u1
         LEFT JOIN games g ON (g.userId = u1.id)
         GROUP BY u1.id
        )x1
       WHERE x1.total_score > x.total_score
     )+1 as rank,
    
    ( SELECT COUNT(DISTINCT total_score) FROM
        (SELECT u1.id, (IFNULL(u1.freebee,0)+ IFNULL(SUM(score),0)) as total_score
         FROM users u1
         LEFT JOIN games g ON (g.userId_Id = u1.id)
         GROUP BY u1.id
        )x1
       WHERE x1.total_score > x.total_score
     )+1 as dns_rank
    
     FROM users u
    
     LEFT JOIN
      ( SELECT u1.id, (IFNULL(u1.freebee,0)+ IFNULL(SUM(score),0)) as total_score
        FROM users u1
        LEFT JOIN games g ON (g.userId = u1.id)
        GROUP BY u1.id
      )x ON (x.id = u.id)
    

    ランク -(通常のランク-例:-1,2,2,4,5)、 dns_rank -密なランク(1,2,2,3,4)。列total_score -デバッグのためだけに...



    1. Oracleポートをポート8080から変更します

    2. Oracle(11.2.0.1):UPDATEステートメントによって現在更新されている行を識別する方法

    3. UPDATEが実行されるまでMySQL選択行をロックしますか?

    4. Djangoを使用して既存のMyISAMデータベースをInnoDBに変換する