15

我有下表:

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

我想要一个结果:

ID | NUM
 5 | 10

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

任何想法?

4

6 回答 6

14

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

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

在其他 RDBMS 系统中,它LIMIT提供了类似的功能。

编辑

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

SELECT TOP 1 WITH TIES ID, NUM 
FROM [table] 
ORDER BY NUM DESC;
于 2012-06-17T17:34:47.333 回答
8

可能返回超过 1 个结果:

SELECT id, num
  FROM table
  WHERE num = (SELECT MAX(num) FROM table)
于 2012-06-17T17:31:24.963 回答
5

试试这个查询。

    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

于 2012-06-18T03:38:17.190 回答
2

怎么样:

SELECT TOP 1 ID,NUM FROM table ORDER BY NUM DESC;
于 2012-06-17T17:29:02.800 回答
1

做这个 -

SELECT TOP 1 ID,
       NUM
FROM <yourtable>
ORDER BY NUM DESC;
于 2012-06-17T17:29:46.187 回答
0

获取所有行都有最大值但有 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)
       )
于 2013-06-20T17:36:43.063 回答