Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL/SQL:aggiornamento con sottoquery correlata dalla tabella aggiornata stessa

Dopo le due risposte che ho ricevuto (nessuna delle quali era completa, quindi ho scritto la mia), quello che alla fine ho fatto è stato il seguente:

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 

Funziona molto rapidamente. Ho anche provato con la sottoquery correlata ma è stata molto più lenta (ordini di grandezza), quindi mi attengo al join.