2011-11-26 126 views
4

例如,我想知道誰是某些人羣中最高的人。我用如何獲得SQL中的最大值?

SELECT name, height 
FROM people 
WHERE height = (SELECT MAX(height) FROM people) 

但它看起來不太好。什麼是最好的方式來做到這一點?

+2

我兒子具有最高的高度,你可以使用一個子查詢相信這是你能做到的最好方式。 – Marco

+0

您正在使用哪種RDBMS? – 2011-11-26 18:50:39

+0

是否有一種與RDBMS無關的方式來執行此操作? – Yrogirg

回答

1

如果使用SQL Server,然後

SELECT TOP 1 name, height 
FROM people 
ORDER BY height DESC 

SQL Server不支持LIMIT方法,所以在這裏你需要,如果你使用MySQL使用TOP

所以:

SELECT name, height 
FROM people 
ORDER BY height DESC LIMIT 1 

如果您擔心超過1

SELECT name, height 
FROM people 
WHERE height = (SELECT TOP 1 height FROM people ORDER BY height DESC) 
ORDER BY name 

當然同樣的例子與MySQL和:

SELECT name, height 
FROM people 
WHERE height = (SELECT height FROM people ORDER BY height DESC LIMIT 1) 
ORDER BY name 
+0

如果你有多個人具有相同的最大高度,你會在第一個之後失去那些人...... – Marco

+0

看到我的編輯然後:) – Behrens

+2

而你最後的查詢是完全一樣的提供的OP ...;) – Marco

6

可以使用LIMIT(MySQL的)或top(MSSQL):

SELECT name, height FROM people ORDER BY height DESC LIMIT 1; 

SELECT TOP 1 name, height FROM people ORDER BY height DESC; 

這將讓1分的紀錄。

要獲得更多記錄,您的子查詢正常工作。如果你不喜歡子查詢,你可以使用這些查詢(MySQL的):

SELECT MAX(height) INTO @maxHeight FROM person ORDER BY height DESC LIMIT 1; 
SELECT * FROM person WHERE height = @maxHeight; 

這樣你就可以重新使用在其他查詢@maxHeight(當前連接)。

+1

如果你有不止一個人具有相同的最大高度,你會在第一次之後失去那些人... – Marco

+0

爲什麼你最後的查詢應該比OP更好?也許他認爲這不太優雅,但他已經給了我們最好的方式來做到這一點,相信我! – Marco

+1

它不比子選擇更好,只是有些人不喜歡子查詢,所以我只是給出了另一種解決方案 –

0

假設你使用MySQL:

SELECT name, height 
FROM people 
ORDER BY ABS(height) DESC LIMIT 1