2012-06-17 130 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