Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL/SQL:atualização com subconsulta correlacionada da própria tabela atualizada


Seguindo as duas respostas que recebi (nenhuma das quais estava completa, então escrevi a minha), o que acabei fazendo foi o seguinte:
UPDATE Table AS target
INNER JOIN 
(
select category, appearances_sum
from Table T inner join (
    select category as cat, sum(appearances) as appearances_sum
    from Table
    group by cat
) as agg
where T.category  = agg.cat
group by category
) as source
ON target.category = source.category
SET target.probability = target.appearances / source.appearances_sum 

Funciona muito rapidamente. Eu também tentei com subconsulta correlacionada, mas era muito mais lento (ordens de magnitude), então estou mantendo a junção.