2010-10-26 11 views

Respuesta

10
SELECT 
    Result/3 AS V, 
    MIN(Result/3) as Min, 
    MAX(Result/3) as Max 
FROM 
(
    SELECT (a+b+c) AS Result from Table 
) AS outerTable 

O incluso

SELECT 
    Result AS V, 
    MIN(Result) as Min, 
    MAX(Result) as Max 
FROM 
(
    SELECT (a+b+c)/3 AS Result from Table 
) AS outerTable 
+0

+1 pero quizás puedas simplificarlo aún más haciendo la división en la selección interna. –

+3

Me pregunto si el futuro estándar SQL puede admitir ** alias en la misma lista de selección para evitar la sub consulta ** –

1

Si necesita el valor (a+b+c)/3 en más de una sola consulta y su dialecto SQL soporta puntos de vista, es posible que desee considerar el uso de una vista.

El siguiente código se puede usar en MySQL para crear una vista que contenga todas las columnas de la tabla MY_TABLE_NAME + una columna adicional que contenga el valor (a+b+c)/3.

CREATE ALGORITHM = UNDEFINED 
SQL SECURITY DEFINER VIEW `MY_TABLE_NAME_FULL_VIEW` AS 
SELECT MY_TABLE_NAME.*, (a+b+c)/3 AS Average 
    FROM `MY_TABLE_NAME`; 

El código siguiente se puede utilizar en MySQL para crear una vista que contiene sólo las columnas A, B y C + una columna adicional que contiene el valor (a+b+c)/3.

CREATE ALGORITHM = UNDEFINED 
SQL SECURITY DEFINER VIEW `MY_TABLE_NAME_LIMITED_VIEW` AS 
SELECT a, b, c, (a+b+c)/3 AS Average 
    FROM `MY_TABLE_NAME`; 

El siguiente código se puede utilizar en MySQL crear una vista en MySQL que contiene sólo el valor (a+b+c)/3.

CREATE ALGORITHM = UNDEFINED 
SQL SECURITY DEFINER VIEW `MY_TABLE_NAME_AVERAGE_VIEW` AS 
SELECT (a+b+c)/3 AS Average 
    FROM `MY_TABLE_NAME`; 

Después de crear su vista, use la vista en lugar de la tabla en sus consultas de selección.


Suponiendo que creó vista MY_TABLE_NAME_AVERAGE_VIEW, podría reemplazar a su estado de SELECT con esto:

SELECT Average AS V, MIN(Average) AS Min, MAX(Average) AS Max 
FROM MY_TABLE_NAME_AVERAGE_VIEW; 

Suponiendo que creó vista MY_TABLE_NAME_LIMITED_VIEW, y también hay que incluir los valores A, B y C, que podía reemplazar su declaración SELECT con esto:

SELECT a, b, c, Average AS V, MIN(Average) AS Min, MAX(Average) AS Max 
FROM MY_TABLE_NAME_LIMITED_VIEW; 
Cuestiones relacionadas