Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zaktualizuj tabelę MySQL o rankingi rekordów w grupach

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

count(*) oceni zero, nawet jeśli żaden wiersz nie spełnia warunku, tj. najwyższego rankingu. Jeśli chcesz mieć gęstą rangę, możesz to zrobić:

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

EDYCJA:Według twojego komentarza znalazłem zapytanie, które działa. (Działa na SQL Server i nie znam dziwactw 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak ponownie zindeksować tabelę mysql

  2. Co oznaczają flagi kolumn w MySQL Workbench?

  3. Usuń używając wielu tabel i powtórz tabelę w podzapytaniu

  4. Wybierz zapytanie w dwóch tabelach w MySQL

  5. Instrukcja przypadku w MySQL