Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да създадете динамично меню с подменю с php &mysql

  2. SQL Ред на сортиране по реда, посочен в заявката

  3. Групиране по ден от времеви печат

  4. MySQL Премахване на последващи прекъсвания на ред от колона

  5. Laravel подрежда резултатите по колона в полиморфна таблица