Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL/SQL:Aktualisierung mit korrelierter Unterabfrage aus der aktualisierten Tabelle selbst

Nach den beiden Antworten, die ich erhalten habe (von denen keine vollständig war, habe ich meine eigene geschrieben), habe ich schließlich Folgendes getan:

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 

Es funktioniert sehr schnell. Ich habe es auch mit korrelierter Unterabfrage versucht, aber es war viel langsamer (Größenordnungen), also bleibe ich bei der Verknüpfung.