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