2011-09-30 10 views
8

C'è qualcosa di simileIn SQL, ci sono min non aggregato/operatori max

select max(val,0) 
from table 

Io non sto cercando di trovare il valore massimo di tutta la tabella

ci deve essere un più facile modo di questo giusto?

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

EDIT: sto usando Microsoft SQL Server

+0

Quale implementazione di SQL? – JNK

+0

In Fortran, MAX (a, b, ...) ha fatto quello che vuoi. In SQL, alcuni dialetti supportano funzioni come 'LARGER' o' SMALLER' o 'LARGEST' o' SMALLEST'. Non esiste una funzione standard per l'attività AFAIK. –

+0

Attenzione al temuto NULL. Avete bisogno di: 'CASE QUANDO val è NULL THEN 0 QUANDO val> 0 THEN val ELSE 0 END' (nel caso in cui 0 è noto non essere nullo), o' CASE WHEN val1 È NULL THEN val2 QUANDO val2 È NULL THEN val1 WHEN val1> val2 THEN val1 ELSE val2 END' per 'MAX (val1, val2)'. –

risposta

9

Funzioni GREATEST e LEAST non sono standard SQL, ma sono in molti RDBMS (ad esempio, PostgreSQL). Così

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

Grazie, potenziato. Sono in esecuzione Microsoft SQL Server. Quindi sembra che quelli non esistano :(. – Colin

1

Non in SQL per sé. Ma molti motori di database definiscono un insieme di funzioni che è possibile utilizzare nelle istruzioni SQL. Sfortunatamente, generalmente usano nomi e liste di argomenti diversi.

In MySQL, la funzione è PIÙ GRANDE. In SQLite, è MAX (funziona in modo diverso con un parametro o più).

0

Ne fanno un set in base aderire?

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

questo modo si evita un UDF scalare suggerito l'altra questione che può soddisfare meglio