MySQL dokumentace je v tom docela jasno:
Obecně platí, že byste nikdy neměli přiřazovat hodnotu uživatelské proměnné a číst hodnotu ve stejném příkazu. Můžete získat výsledky, které očekáváte, ale to není zaručeno. Pořadí hodnocení výrazů zahrnujících uživatelské proměnné není definováno a může se změnit na základě prvků obsažených v daném příkazu; navíc není zaručeno, že toto pořadí bude mezi vydáními serveru MySQL stejné. V SELECT @a, @a:[email protected] +1, ..., můžete si myslet, že MySQL nejprve vyhodnotí @a a poté provede přiřazení. Změna příkazu (například přidáním klauzule aGROUP BY, HAVING nebo ORDER BY) však může způsobit, že MySQL vybere plán provádění s jiným pořadím vyhodnocení.
Pomocí dílčího dotazu můžete dělat, co chcete:
select @z, @z*2
from (SELECT @z:=sum(item)
FROM TableA
) t;