MAX功能无需分组

m0f*_*0fo 10 sql sql-server

我有下表:

ID | NUM
 1 |  4
 2 |  9
 3 |  1
 4 |  7
 5 |  10
Run Code Online (Sandbox Code Playgroud)

我想要一个结果:

ID | NUM
 5 | 10
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

Stu*_*tLC 11

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

SELECT TOP 1 ID, NUM 
FROM [table] 
ORDER BY NUM DESC;
Run Code Online (Sandbox Code Playgroud)

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

编辑

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

SELECT TOP 1 WITH TIES ID, NUM 
FROM [table] 
ORDER BY NUM DESC;
Run Code Online (Sandbox Code Playgroud)


Gle*_*enn 7

可能返回 1 个以上的结果:

SELECT id, num
  FROM table
  WHERE num = (SELECT MAX(num) FROM table)
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)

即使它有更多的 MAX 值,它也会返回最大值,例如:

ID | NUM
 5 | 10
 6 | 10 
Run Code Online (Sandbox Code Playgroud)

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