Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Defina uma variável dentro do select e use-a dentro do mesmo select


MySQL documentação é bem claro sobre isso:

Como regra geral, você nunca deve atribuir um valor a uma variável de usuário e ler o valor na mesma instrução. Você pode obter os resultados esperados, mas isso não é garantido. A ordem de avaliação para expressões envolvendo variáveis ​​de usuário é indefinida e pode ser alterada de acordo com os elementos contidos em uma determinada instrução; além disso, não é garantido que esta ordem seja a mesma entre as versões do MySQL Server. Em SELECT @a, @a:[email protected] +1, ..., você pode pensar que o MySQL avaliará @a primeiro e depois fará uma atribuição em segundo. No entanto, alterar a instrução (por exemplo, adicionando uma cláusula GROUP BY, HAVING ou ORDER BY) pode fazer com que o MySQL selecione um plano de execução com uma ordem diferente de avaliação.

Você pode fazer o que quiser usando uma subconsulta:
select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;