如何在 sql 中的列中查找最小值
How to find minimum values in a column in sql
如果我有这样的table:
id name value
1 abc 1
2 def 4
3 ghi 1
4 jkl 2
我怎样才能 select 一个新的 table 仍然有 id, name, value
但只有最小值的
在这个例子中,我需要这个 table 返回:
1 abc 1
3 ghi 1
找到这些值非常简单:
SELECT *
FROM YourTable
WHERE value = (SELECT MIN(Value) FROM YourTable);
至于将这些行放在另一个 table 中的正确语法,这将取决于您使用的数据库引擎。
@Lamak 解决方案的替代方法是使用 rank
window 函数。根据具体情况,它可能会表现得更好:
SELECT id, name, value
FROM (SELECT id, name, value, RANK() OVER (ORDER BY value ASC) AS rk
FROM mytable) t
WHERE rk = 1
不确定这是否是您想要做的,但我认为这会起作用:
--creating #temp1 to recreate your table/example
CREATE TABLE #TEMP1
(id INT NOT NULL PRIMARY KEY,
name CHAR(3) NOT NULL,
value INT NOT NULL)
INSERT INTO #TEMP1
VALUES
(1,'abc',1),
(2,'def',4),
(3,'ghi',1),
(4,'jkl',2)
-verify correct
SELECT * FROM #temp1
--populate new table with min value from table 1
SELECT *
INTO #TEMP2
FROM #TEMP1
WHERE value = (SELECT MIN(value)
FROM #TEMP1)
SELECT * FROM #TEMP2
如果我有这样的table:
id name value
1 abc 1
2 def 4
3 ghi 1
4 jkl 2
我怎样才能 select 一个新的 table 仍然有 id, name, value
但只有最小值的
在这个例子中,我需要这个 table 返回:
1 abc 1
3 ghi 1
找到这些值非常简单:
SELECT *
FROM YourTable
WHERE value = (SELECT MIN(Value) FROM YourTable);
至于将这些行放在另一个 table 中的正确语法,这将取决于您使用的数据库引擎。
@Lamak 解决方案的替代方法是使用 rank
window 函数。根据具体情况,它可能会表现得更好:
SELECT id, name, value
FROM (SELECT id, name, value, RANK() OVER (ORDER BY value ASC) AS rk
FROM mytable) t
WHERE rk = 1
不确定这是否是您想要做的,但我认为这会起作用:
--creating #temp1 to recreate your table/example
CREATE TABLE #TEMP1
(id INT NOT NULL PRIMARY KEY,
name CHAR(3) NOT NULL,
value INT NOT NULL)
INSERT INTO #TEMP1
VALUES
(1,'abc',1),
(2,'def',4),
(3,'ghi',1),
(4,'jkl',2)
-verify correct
SELECT * FROM #temp1
--populate new table with min value from table 1
SELECT *
INTO #TEMP2
FROM #TEMP1
WHERE value = (SELECT MIN(value)
FROM #TEMP1)
SELECT * FROM #TEMP2