Я просто пытаюсь упростить инструкцию Select:
Select (a+b+c)/3 AS V, MIN((a+b+c)/3) as Min, MAX((a+b+c)/3) as Max from ....
Есть ли чистый способ избежать повторения этой формулы (a + b + c)/3 в совокупных функциях?
Я просто пытаюсь упростить инструкцию Select:
Select (a+b+c)/3 AS V, MIN((a+b+c)/3) as Min, MAX((a+b+c)/3) as Max from ....
Есть ли чистый способ избежать повторения этой формулы (a + b + c)/3 в совокупных функциях?
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
ИЛИ даже
SELECT
Result AS V,
MIN(Result) as Min,
MAX(Result) as Max
FROM
(
SELECT (a+b+c)/3 AS Result from Table
) AS outerTable
Если вам нужно значение (a+b+c)/3
не более одного запроса, и ваш диалект SQL поддерживает представления, вам может потребоваться использовать View.
Следующий код может использоваться в MySQL
для создания представления, содержащего все столбцы таблицы MY_TABLE_NAME
+ дополнительный столбец, содержащий значение (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`;
Следующий код может использоваться в MySQL
для создания представления, содержащего только столбцы a, b и c + дополнительный столбец, содержащий значение (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`;
Следующий код может использоваться в MySQL
для создания представления в MySQL, который содержит только значение (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`;
После того, как вы создали свое представление, используйте представление вместо таблицы в выбранных запросах.
Предполагая, что вы создали представление MY_TABLE_NAME_AVERAGE_VIEW
, вы можете заменить инструкцию SELECT
следующим образом:
SELECT Average AS V, MIN(Average) AS Min, MAX(Average) AS Max
FROM MY_TABLE_NAME_AVERAGE_VIEW;
Предполагая, что вы создали представление MY_TABLE_NAME_LIMITED_VIEW
, и вам также нужно включить значения a, b и C, вы можете заменить инструкцию SELECT
следующим образом:
SELECT a, b, c, Average AS V, MIN(Average) AS Min, MAX(Average) AS Max
FROM MY_TABLE_NAME_LIMITED_VIEW;