2011-09-30 45 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,這可能更適用