2010-01-16 35 views
42

¿Por qué no funciona esta consulta?Usando un alias en cálculos de SQL

SELECT 10 AS my_num, my_num*5 AS another_number 
FROM table 

En este ejemplo, estoy tratando de usar el alias my_num en otros cálculos. Esto da como resultado una columna desconocida "my_num"

Esta es una versión simplificada de lo que estoy tratando de hacer, pero básicamente me gustaría usar un alias para hacer otros cálculos. Mis cálculos son mucho más complicados y es por eso que sería bueno alias, ya que lo repito varias veces de diferentes maneras.

+0

Debes leer la respuesta de zessx: hace exactamente lo que necesitas sin la subconsulta que tiene la respuesta aceptada actualmente. –

Respuesta

102

Simplemente envolver su alias reutilizado con (SELECT alias):

SELECT 10 AS my_num, 
     (SELECT my_num) * 5 AS another_number 
FROM table 
+9

Esto es INCREÍBLE y debería ser la respuesta aceptada. Muchas gracias. –

+11

Me pregunto dónde está documentada esa funcionalidad. He buscado en toda la documentación de MySQL y no lo he encontrado. No sé cómo funciona esta "reutilización de alias" y tengo curiosidad acerca de la portabilidad o el impacto en el rendimiento. Si alguien sabe más sobre esto, agradeceré un enlace. Gracias. –

+0

esto acaba de hacer mi semana ... tal vez mes. súper útil especialmente con alias construidos a partir de sentencias de control de flujo como 'IF()', 'CASE()', etc. – billynoah

10

Usted tendrá que utilizar una subselección de usar que los alias de esa manera

SELECT my_num*5 AS another_number FROM 
(
    SELECT 10 AS my_num FROM table 
) x 
+0

¿Para qué es la "x"? – mysmallidea

+0

@RyanHeneise, es un alias de subselección; de esa manera usted podría ir con 'x.my_num' –

4

alias en SQL no son como las variables de un lenguaje de programación. Los alias solo se pueden referenciar nuevamente en ciertos puntos (particularmente en las cláusulas GROUP BY y HAVING). Pero no puede reutilizar un alias en la cláusula SELECT. De modo que puede usar una consulta derivada (como la sugerida por Rubens Farias) que le permite cambiar el nombre de sus columnas y/o nombrar las columnas calculadas.

O usted podría utilizar un VIEW si sus fórmulas se fijan generalmente

CREATE VIEW table10 AS SELECT 10 AS my_num FROM table; 
SELECT my_num * 5 AS another_number FROM table10; 

creo que será ligeramente más rápido que mediante una consulta derivada pero probablemente depende mucho de la consulta real.

O usted podría duplicar el trabajo:

SELECT 10 AS my_num, 10 * 5 AS another_number FROM table; 

Lo que podría ser conveniente en algo así como PHP/Perl:

my $my_num = 10; 
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table"; 
0

`` Otra opción es utilizar el operador APPLY

SELECT my_num, my_num*5 AS another_number 
FROM table 
CROSS APPLY 
(SELECT 5 AS my_num) X 
+0

Tenga en cuenta que 'CROSS APPLY' no parece estar disponible en MySQL * (todavía) *. – Pang

Cuestiones relacionadas