Sql 不带分组的最大函数

Sql 不带分组的最大函数,sql,sql-server,Sql,Sql Server,我有下表: ID | NUM 1 | 4 2 | 9 3 | 1 4 | 7 5 | 10 我想要一个结果: ID | NUM 5 | 10 当我尝试使用MAX(NUM)时,我得到一个错误,为了使用MAX函数,我必须使用groupby 有什么想法吗?怎么样: SELECT TOP 1 ID,NUM FROM table ORDER BY NUM DESC; 这样做- SELECT TOP 1 ID, NUM FROM <yourtable>

我有下表:

ID | NUM
 1 |  4
 2 |  9
 3 |  1
 4 |  7
 5 |  10
我想要一个结果:

ID | NUM
 5 | 10
当我尝试使用MAX(NUM)时,我得到一个错误,为了使用MAX函数,我必须使用groupby

有什么想法吗?

怎么样:

SELECT TOP 1 ID,NUM FROM table ORDER BY NUM DESC;
这样做-

SELECT TOP 1 ID,
       NUM
FROM <yourtable>
ORDER BY NUM DESC;
选择前1个ID,
全国矿工联盟
从…起
按NUM DESC排序;

可能返回多个结果:

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

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

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

编辑

如果需要返回最大值相同的所有行,请使用:

尝试此查询

    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 
有关排名功能的更多信息,请参阅下面的链接:

获取所有行都有最大值,但有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)
       )

你想要马克斯做什么
ID
NUM
?我想知道NUM的最大值,但我也想知道ID。如果你去掉5,10,得到2,9作为预期结果,示例可能会更好。另外,如果两行共享一个MAX(num)?@AaronBertrand-我希望你知道提问者可以编辑他的问题。你认为为什么会有3个答案有
限制
?对不起,我5个小时后来到这里,没有看到对问题进行任何编辑的证据。显然,如果我看到有限的答案,我不应该让他们留下,因为他们是不正确的,对吗?感谢您的更正,但现在它只是一个重复。这个问题被标记为SQL Server,没有
限制
MySQL(没有
TOP
)会是什么样子?我的问题更多的是关于问题的第二部分,我想用TIES获取所有具有最大值
的行,但这似乎不是ANSI SQL的一部分。常见的解决方法似乎是对最高值进行自连接,然后限制结果:
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)
       )