簡體   English   中英

SQL:在同一select語句中使用函數中列的別名

[英]SQL: Using alias of a column in a function in the same select statement

我只是想簡化一個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中使用以下代碼創建一個View,其中包含表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的View。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM