sql >> Base de Datos >  >> RDS >> Mysql

MySQL/SQL:actualización con subconsulta correlacionada de la propia tabla actualizada

Después de las dos respuestas que recibí (ninguna de las cuales estaba completa, así que escribí la mía), lo que finalmente hice fue lo siguiente:

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 muy rápido. También probé con la subconsulta correlacionada, pero fue mucho más lenta (órdenes de magnitud), así que me quedo con la unión.