2012-06-17 118 views
8

我有以下表格:MAX功能由

ID | NUM 
1 | 4 
2 | 9 
3 | 1 
4 | 7 
5 | 10 

我想要的結果:

ID | NUM 
5 | 10 

當我嘗試使用MAX(NUM)我得到的和錯誤,我有使用GROUP BY以使用MAX功能

任何想法?

+0

你最想做什麼? 'ID'還是'NUM'? – JHS

+1

我想要MAX的MAX,但我也想知道ID。 –

+2

如果您切斷5,10並且如預期的結果那樣有2,9,則示例可能會更好。另外,如果兩行共享一個MAX(num)呢? – Glenn

回答

9

按照錯誤,使用像Max聚集的需要一個Group By子句,如果在選擇列表中有任何非聚合列(在您的c ase,您正試圖找到MAX(Num),然後返回ID列中關聯的值)。在MS SQL Server,可以讓你通過排序和限制想要什麼返回行:

SELECT TOP 1 ID, NUM 
FROM [table] 
ORDER BY NUM DESC; 

在其他RDBMS系統的LIMIT提供了類似的功能。

編輯

如果您需要返回其具有相同的最大的所有行,然後使用WITH TIES qualification

SELECT TOP 1 WITH TIES ID, NUM 
FROM [table] 
ORDER BY NUM DESC; 
1

如何:

SELECT TOP 1 ID,NUM FROM table ORDER BY NUM DESC; 
+0

是的,我是在自動駕駛。我已經糾正了它 – jpiasetz

1

做到這一點 -

SELECT TOP 1 ID, 
     NUM 
FROM <yourtable> 
ORDER BY NUM DESC; 
+0

@AaronBertrand - 我希望你知道提問者可以編輯他的問題。你爲什麼認爲在那裏有3個答案和LIMIT? – JHS

+1

對不起,我5個小時後來到這裏,沒有看到有任何編輯問題的證據。很明顯,如果我看到LIMIT的答案,我不應該讓他們留下來,因爲他們不正確,對吧?感謝您的糾正,但現在它只是一個重複。 –

2

可能返回大於1分的結果:

SELECT id, num 
    FROM table 
    WHERE num = (SELECT MAX(num) FROM table) 
3

嘗試此查詢。

WITH result AS 
    (
     select DENSE_RANK() OVER( ORDER BY NUM desc) AS RowNo,ID,NUM from #emp 
    ) 
    select ID,NUM from result where RowNo=1 

它將返回最大值,即使它有更多的最大值,如:

ID | NUM 
5 | 10 
6 | 10 

參考以下鏈接瞭解更多關於排名函數:
http://msdn.microsoft.com/en-us/library/ms189798

-1

得到所有行具有最大值,但有3選擇,這對性能不好

SELECT id, MAX(num) as num 
FROM table 
GROUP BY id 
ORDER BY MAX(num) DESC 
LIMIT (SELECT COUNT(*) 
     FROM table 
     WHERE num =(SELECT MAX(num) FROM table) 
     ) 
+1

這個問題被標記爲SQL Server,沒有'LIMIT' – Taryn