Teradata

SQL MAX 函式

  • November 23, 2014

假設我有一個屬性名稱、年齡的表,如下所示:

MyTable (Name, Age)

現在,要獲得最大年齡,我可以編寫以下查詢:

SELECT MAX(Age) AS "Oldest Age" FROM MyTable;

但是,當我只想要年齡最大的人的名字時,我無法弄清楚查詢。我嘗試了以下方法,但它不起作用:

SELECT Name FROM MyTable
WHERE MAX(Age);

任何幫助表示讚賞。

我相信 Teradata 支持視窗函式,因此您可以使用它們來選擇較大的值。

select name, age
from (
  select name, age, 
         dense_rank() over (order by age desc) as rn
  from MyTable
) t
where rn = 1;

如果有多個姓名具有相同的年齡,則會顯示所有姓名。如果您只想選擇一個,請使用row_number()而不是dense_rank()

使用視窗函式通常比子選擇更快。

WHERE 子句需要一個條件,如果您鍵入:

SELECT Name FROM MyTable
WHERE MAX(Age);

沒有條件。試著把它翻譯成一句話:

從 MyTable 中選擇名稱,其中最大年齡…

現在將其與此語句進行比較:

從 MyTable 中選擇年齡欄位等於的名稱(選擇最大年齡)

現在在 SQL 程式碼中:

SELECT Name FROM MyTable
WHERE Age = (SELECT MAX(Age) FROM MyTable);

希望它有所幫助。

引用自:https://dba.stackexchange.com/questions/83381