Sql 具有列的最小值的行
有这种选择:Sql 具有列的最小值的行,sql,sql-server,Sql,Sql Server,有这种选择: id IDSLOT N_UM ------------------------ 1 1 6 2 6 2 3 2 1 4 4 1 5 5 1 6 8 1 7 3 1 8 7 1 9 9 1 10 10 0 我希望得到最小值为N_UM的行(仅一行),在本例中,是id=10(10 0)的行。我会尝试以下方法: SELECT TOP 1 * FROM TABLE1 ORDER BY N_UM (使用SQL Server)尝试以下操作- sel
id IDSLOT N_UM
------------------------
1 1 6
2 6 2
3 2 1
4 4 1
5 5 1
6 8 1
7 3 1
8 7 1
9 9 1
10 10 0
我希望得到最小值为N_UM的行(仅一行),在本例中,是id=10(10 0)的行。我会尝试以下方法:
SELECT TOP 1 *
FROM TABLE1
ORDER BY N_UM
(使用SQL Server)尝试以下操作-
select top 1 * from table where N_UM = (select min(N_UM) from table);
使用此sql查询:
select id,IDSLOT,N_UM from table where N_UM = (select min(N_UM) from table));
这里有一种方法
Create table #t (
id int,
IDSLOT int,
N_UM int
)
insert into #t ( id, idslot, n_um )
VALUES (1, 1, 6),
(2,6,2),
(3,2,1),
(4,4,1),
(5,5,1),
(6,8,1),
(7,3,1),
(8,7,1),
(9,9,1),
(10, 10, 0)
select Top 1 *
from #t
Where N_UM = ( select MIN(n_um) from #t )
方法1:
SELECT top 1 *
FROM table
WHERE N_UM = (SELECT min(N_UM) FROM table);
方法2:
SELECT *
FROM table
ORDER BY N_UM
LIMIT 1
这类问题的更一般的解决方案如下
方法3:
SELECT *
FROM table
WHERE N_UM IN (SELECT MIN(N_UM) FROM table);
+我领先我4秒。我们需要知道RDBMS,可能是
limit
或其他东西。@Martin Smith:没错。我使用SQL Server,所以我就是这样回答的。可能应将其标记为:另外,他只想要一行。+限制1
如果你只想要一行(像被问的那样)。同意,同意-编辑我的答案以满足所有评论。尽管如此,Adam V和我的变体更纯粹:一次选择,没有过滤。安德烈伊斯·凯尼科夫的解决方案不应该比双选更快吗?为什么在中而不是=
?这可能会导致MySQL中出现性能问题。错误:1。将返回多行,2。对于这样一个简单的任务,两次选择并不是一个选项。为了完整性起见,如果有多行具有相同的最小值,您希望看到什么行为?是否要返回所有匹配的行?返回ID最大的单行?最小的身份证?任何一个?你不是指按N_UM
顺序吗?这是一个通用的例子。用您需要的任何名称替换表名和列名。这非常好。并非所有DB都支持“TOP”,我在所有其他建议中都遇到语法错误。谢谢,非常优雅。类似地,如果有人需要max,则从表中选择*按列的名称顺序\u NAME desc limit 1
问题被标记为sql server。SQL Server不支持limit
关键字哪个更快?我想是第二种方法吧?
SELECT *
FROM table
ORDER BY N_UM
LIMIT 1
SELECT *
FROM table
WHERE N_UM IN (SELECT MIN(N_UM) FROM table);