2011-09-30 19 views
8

operatorzy Czy istnieje coś takiego jakW SQL, istnieją non-kruszywo min/max

select max(val,0) 
from table 

nie szukam, aby znaleźć maksymalną wartość całej tabeli

Musi być łatwiejszy sposób niż to prawo?

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

EDIT: używam Microsoft SQL Server

+0

Co wdrażania SQL? – JNK

+0

W Fortranie MAX (a, b, ...) zrobił to, co chcesz. W SQL niektóre dialekty obsługują takie funkcje, jak 'LARGER' lub' SMALLER' lub 'LARGEST' lub' SMALLEST'. Nie ma standardowej funkcji dla zadania AFAIK. –

+0

Uważaj na przerażającą NULL. Czy potrzebujesz: 'CASE WHEN val IS NULL THEN 0 WHEN val> 0 THEN val ELSE 0 END' (dla przypadku, gdy 0 nie jest puste) lub' CASE, gdy val1 JEST NIŻE THEN val2 WHEN val2 IS NULL THEN val1 WHEN val1> val2 THEN val1 ELSE val2 END' dla 'MAX (val1, val2)'. –

Odpowiedz

9

Funkcje GREATEST i LEAST SQL nie są standardowe, ale są w wielu RDBMSs (na przykład, PostgreSQL). Więc

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

Dzięki, wznowione. Używam Microsoft SQL Server. Wygląda więc na to, że takich nie ma :(. – Colin

1

nie w SQL per se. Jednak wiele silników baz danych definiuje zestaw funkcji, których można używać w instrukcjach SQL. Niestety, zazwyczaj używają oni różnych nazw i listy argumentów.

W MySQL funkcja jest NAJWYŻSZA. W SQLite jest to MAX (działa inaczej niż jeden parametr lub więcej).

0

Zrób to zestaw oparty przyłączyć?

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

ten sposób unika skalarne UDF zaproponowaną w drugim pytaniu, które mogą dopasować lepsze

Powiązane problemy