MAX功能无需分组

时间:2012-06-17 17:24:09

标签: sql sql-server

我有下表:

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

我想要一个结果:

ID | NUM
 5 | 10

当我尝试使用MAX(NUM)时,我得到错误,我必须使用GROUP BY才能使用MAX函数

有什么想法吗?

6 个答案:

答案 0 :(得分:10)

根据错误,如果选择列表中有任何非聚合列,则使用Max之类的聚合需要Group By子句(在您的情况下,您试图找到{ {1}}然后返回MAX(Num)列中关联的值。在MS SQL Server中,您可以通过排序获取所需内容并限制返回的行:

ID

在其他RDBMS系统中,SELECT TOP 1 ID, NUM FROM [table] ORDER BY NUM DESC; 提供类似的功能。

修改

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

LIMIT

答案 1 :(得分:4)

尝试此查询。

    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

即使它具有更多MAX值,它也将返回最大值:

ID | NUM
 5 | 10
 6 | 10 

请参阅以下链接,了解有关排名功能的更多信息:
http://msdn.microsoft.com/en-us/library/ms189798

答案 2 :(得分:2)

怎么样:

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

答案 3 :(得分:2)

可能会返回超过1个结果:

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

答案 4 :(得分:1)

这样做 -

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

答案 5 :(得分:-1)

获取所有行都有最大值但是有3个SELECT,这对性能不好

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)
       )