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

グループ内のレコードランキングでMySQLテーブルを更新します

    update winners
    set rank = (
        select count(score) + 1
        from winners w2
        where w2.category_id = winners.category_id and w2.score > winners.score
    )
    

    count(*) 条件に一致する行がない場合、つまり最上位にある場合でも、ゼロと評価されます。密なランクが必要な場合は、これを行うことができます:

    update winners
    set rank = (
        select count(distinct score) + 1
        from winners w2
        where w2.category_id = winners.category_id and w2.score > winners.score
    )
    

    編集:あなたのコメントによると、私はうまくいくクエリを見つけました。 (SQL Serverで動作し、MySQLの癖に精通し​​ていません。) http:// sqlfiddle.com/#!9/1159f/1

    update winners
    inner join (
        select w.id, w.category_id, count(w2.score) + 1 rank
        from winners w left outer join winners w2
            on w2.category_id = w.category_id and w2.score > w.score
        group by w.id
    ) r
        on r.id = winners.id
    set winners.rank = r.rank
    



    1. PSQLException:現在のトランザクションは中止され、トランザクションブロックが終了するまでコマンドは無視されます

    2. 接続されたデータベースdatabase.sqlファイルをlaravelでバックアップ/エクスポートする方法は?

    3. MySQL:主キーとしてDATETIMEを使用

    4. MySQLを学ぶための5つの最高のオンラインコース