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.