J'essaie de faire quelque chose comme ça. Mais je reçois une erreur de colonne inconnue:
SELECT SUM(field1 + field2) AS col1, col1 + field3 AS col3 from core
En gros, je veux simplement utiliser le pseudonyme afin de ne pas avoir à exécuter les opérations effectuées précédemment. Est-ce possible dans mysql?
Pensez à utiliser une sous-requête, telle que:
SELECT col1
, col1 + field3 AS col3
FROM (
SELECT field1 + field2 as col1
, field3
from core
) as SubQueryAlias
Vous pouvez select
l'alias:
SELECT SUM(field1 + field2) AS col1, (select col1) + field3 AS col3 from core
Cela marche.
Selon les spécifications La réponse de Ravi Parekh ne fonctionne pas toujours, car "l'ordre d'évaluation des expressions impliquant des variables utilisateur n'est pas défini".
J'ai trouvé cette réponse après avoir essayé d'utiliser une variable et obtenu des résultats étranges.
select @code:= SUM(field1 + field2), (@code*1) from abc;
@ code * 1 convertir en expression numérique et vous pouvez utiliser n'importe où, comme
select @code:= SUM(field1 + field2), (@code*1)+field3 from abc;
La réponse courte est non:
mysql> select 1 as a, a + 1 as b;
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
postgresql# select 1 as a, a + 1 as b;
ERROR: column "a" does not exist
Cela dit, certaines implémentations SQL permettent d’utiliser les alias dans les clauses where/group by/having, par exemple:
postgresql# select 1 as a group by a; -- 1 row
Si vous l'utilisez avec la fonction d'agrégat (group by) et si cela ne fonctionne pas, placez la colonne calculée à la fin avec un renvoi de colonne en aval.
SELECT FNC2(AF), FNC1(A) AS AF, B, C, FROM Table GROUP BY ...
1st one doesn't work due to forward column referencing. Do this instead
SELECT FNC1(A) AS AF, B, C, FNC2((SELECT AF)) FROM Table GROUP BY ...