2011-03-04 100 views
0

我創建了下表。max()函數

create table man(id integer, name varchar(20), city varchar(20), age integer) 

我想查找最大年齡的人的姓名。

所以,我跑下面的查詢,

select name, max(age) from man group by name; 

它顯示所有的人按升序隨着年齡的名稱。出了什麼問題?

+2

男人實際上包含什麼?一個人的最大年齡是多少?我只知道同一個年齡段的人。 –

+0

似乎我終於明白你在問什麼。試着相應地編輯你的問題。 –

回答

0

對於每個名稱,它會給你帶有該名稱的所有人的最大年齡。 (這是你問什麼,不是嗎?)

+0

是的,你是對的。它顯示每個名稱的最大年齡與該名稱。 – Pooja

2

如果你想獲得與年齡更大的人,你可以這樣做:

select name, age from man order by age desc limit 1; 

對於查詢與SQL Server的工作:

select top 1 name, age from man order by age desc; 

您的查詢正在做其他事情。 max使用您的group子句進行計算。由於您是按名稱分組的,因此max(age)是具有相同名稱的人的最大年齡。

+0

對不起,它不工作。它顯示錯誤如「SQL not recognized'LIMIT'」。這意味着,SQL Server不支持「LIMIT」。 – Pooja

+0

我更新了我的回答 – krtek

0

選擇名稱。最大(年齡)來自人名;

應該是

SELECT name,max(age)FROM man GROUP BY name;

您也可以嘗試

SELECT姓名,年齡從人的ORDER BY DESC年齡

也許你正期待將是有益的結果多一點的信息?

1

我很難理解你在這裏做什麼。一個人在你的模型中可以有多於一個年齡?

無論如何。如果你想在表man的最高年齡,你需要運行:

select max(age) from man 

現在,這是誰?如果將name添加到查詢中,則數據庫引擎將返回所有名稱(因爲您要求所有名稱,而不是特定名稱;組合將無法幫助,因爲大多數名稱已經被忽略)與最大值相結合。 age列的值。

你需要的是一個子查詢:

select m1.name 
from man m1 
where m1.age = (
    select max(m2.age) 
    from man m2 
) 

這將選擇所有元素,其中年齡是一樣的,在設定的最高年齡。

+0

不介意這個評論...我錯了 – krtek

0
SELECT NAME, AGE 
    FROM MAN 
GROUP BY NAME, AGE 
    HAVING AGE = (SELECT MAX (AGE) FROM MAN) 
+0

年齡= MAX(年齡)也會工作 – Andrew

+0

thx增強;-) – swissben