... klemmt, wenn keine Zeile zurück kommt!

statt select ifnull(...) from ...
set (coalesce((select ... from...), 0)

außerdem geht das auch schief, wenn mehr als eine Zeile zurück kommt

D*B