如何在 Sql Server 中获得 3 个值中的最低值?
MySQL 中的相同函数称为 LEAST,而 SQL Server 中的比较?
您可以在没有嵌套案例的情况下执行此操作:
select (case when val1 < val2 and val1 < val3 then val1
when val2 < val3 then val2
else val3
end) as least_of_three
这似乎很清楚它在做什么。它也很容易概括。
一定要小心 NULL —— LEAST 和 GREATEST 会忽略它。如果你需要处理这些,那就有点麻烦了:
select (case when val1 <= coalesce(val2, val1) and val1 <= coalesce(val3, val1) then val1
when val2 <= coalesce(val3, val2) then val2
else val3
end) as least_of_three
请注意,我已将“<”更改为“<=”。我使用合并通过评估为真来“忽略”该值。因此,如果 val2 为空,则 val1 始终小于 val2。我选择了这种方法,因为它适用于所有数据类型(字符串、数字、日期)。
编辑:
我通常不会回去写七岁的问题的答案,但这个问题显然是SQL Server。最好的方法使用apply
:
select t.*, max_val
from t cross apply
(select max(v.val) as max_val
from (values (t.val1), (t.val2), . . .
) v(val);
请注意,此解决方案在 MySQL 中不起作用,因为它不支持横向连接。
显而易见的嵌套 case 语句是:
select case when val1 < val2 then
case when val1 < val3 then val1
else val3
end
when val2 < val3 then val2
else val3
end
from cols;
上
create table cols (val1 int, val2 int, val3 int);
它不会很容易地扩展到更高的比较 #,并且它不包括合并语句来抑制空值。
唯一的优势是其他程序员在查看您的代码时将能够快速弄清楚。(除非这是性能瓶颈,否则我认为这是一个很好的考虑!)
SQL Server 中没有类似于 mysql 中的 Least() 函数的函数
MySQL 的 Least() 函数执行以下操作
取两个或多个参数,返回最小(最小值)参数。使用以下规则比较参数:
如果任何参数为 NULL,则结果为 NULL。不需要比较。
如果在 INTEGER 上下文中使用返回值或所有参数都是整数值,则将它们作为整数进行比较。
如果在 REAL 上下文中使用返回值或所有参数都是实值,则将它们作为实数进行比较。
如果参数包含数字和字符串的混合,则将它们作为数字进行比较。
如果任何参数是非二进制(字符)字符串,则将参数作为非二进制字符串进行比较。
在所有其他情况下,参数作为二进制字符串进行比较。
sql server 的 Min() 函数返回不带参数的表中列的最小值
这是一个模拟,但仍然不像 Least 因为它只能接受整数
CREATE FUNCTION [dbo].[GetSmallest]
(
-- Add the parameters for the function here
@val1 int, @val2 int, @val3 int
)
RETURNS int
AS
BEGIN
Declare @result int
set @result = case when @val1 < @val2 then
case when @val1 < @val3 then
@val1
else
@val3
end
when @val2 < @val3 then
@val2
else
@val3
end
return @result
END
这是你的称呼
SELECT [dbo].[GetSmallest] ( 32 ,31 ,6)
如果你想避免嵌套 CASE 语句,这会做(虽然有点尴尬):
CREATE TABLE #t(ID INT, V1 INT, V2 INT, V3 INT)
INSERT INTO #t VALUES
(1, 10, 20, 30)
, (2, 60, 50, 40)
SELECT * FROM #t t1
CROSS APPLY (SELECT MAX(V), MIN(V) FROM (
SELECT V1 AS V
UNION SELECT V2
UNION SELECT V3
) T) AS t2(VMAX, VMIN)
DROP TABLE #t
您可以在 T-SQL 中使用“Min”函数:
SELECT MIN(Value) FROM MyTable