我有下表:
ID | NUM
1 | 4
2 | 9
3 | 1
4 | 7
5 | 10
我想要一个结果:
ID | NUM
5 | 10
当我尝试使用MAX(NUM)时,我得到错误,我必须使用GROUP BY才能使用MAX函数
有什么想法吗?
答案 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)
)