sql >> Databáze >  >> RDS >> Mysql

Aktualizujte tabulku MySQL o hodnocení záznamů ve skupinách

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

count(*) se vyhodnotí na nulu, i když žádné řádky neodpovídají podmínce, tj. nejvyššímu hodnocení. Pokud jste chtěli hustou hodnost, můžete udělat toto:

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

EDIT:Podle vašeho komentáře jsem našel dotaz, který funguje. (Funguje to na SQL Serveru a neznám vrtochy 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. 8 Nové funkce kompatibility Oracle v EnterpriseDB PPAS 9.2 Beta

  2. Data sloupce kontingenční tabulky MySQL jako řádky

  3. Vytvoření procedury v mySql s parametry

  4. Jak mám uložit GUID v tabulkách MySQL?