2011-09-30 64 views
8

有什么样在SQL中,是否有非集合最小/最大运营商

select max(val,0) 
from table 

我不希望找到整个表的最大值

必须有一个更简单方式比这个权利?

select case when val > 0 then val else 0 end 
from table 

编辑:我使用Microsoft SQL Server

+0

什么SQL实现? – JNK

+0

在Fortran中,MAX(a,b,...)做了你想要的。在SQL中,一些方言支持“LARGER”或“SMALLER”或“LARGEST”或“SMALLEST”等函数。 AFAIK任务没有标准功能。 –

+0

请注意可怕的NULL。你是否需要:'如果val是NULL,则THEN 0当VAL> 0 THEN val ELSE 0 END'(对于0已知不是NULL的情况),或者'CASE WHERE VAL1 IS NULL THEN VAL2 WHERE VAL2 IS NULL THEN val1 WHEN val1> val2 THEN val1 ELSE val2 END' for MAX(val1,val2)'。 –

回答

9

功能GREATESTLEAST不是SQL标准,但在许多的RDBMS(例如,PostgreSQL系统)。所以

SELECT GREATEST(val, 0) FROM mytable; 
+0

谢谢,upvoted。我正在运行Microsoft SQL Server。所以它看起来像那些不存在:(。 – Colin

1

在SQL 本身。但是许多数据库引擎定义了一组可以在SQL语句中使用的函数。不幸的是,他们通常使用不同的名称和参数列表。

在MySQL中,函数是最好的。在SQLite中,它是MAX(它的工作方式与一个或多个参数不同)。

0

让它基于JOIN一套?

SELECT 
    max(val) 
FROM 
(
select val 
from table 
UNION ALL 
select 0 
) foo 

这避免了在其他问题提出了一个标量UDF,这可能更适用