¿Cómo obtener min / max de dos enteros en Postgres / SQL?

147

¿Cómo encuentro el máximo (o mínimo) de dos enteros en Postgres / SQL? Uno de los enteros no es un valor de columna.

Daré un escenario de ejemplo:

Me gustaría restar un número entero de una columna (en todas las filas), pero el resultado no debe ser menor que cero. Entonces, para empezar, tengo:

UPDATE my_table
SET my_column = my_column - 10;

Pero esto puede hacer que algunos de los valores sean negativos. Lo que me gustaría (en pseudocódigo) es:

UPDATE my_table
SET my_column = MAXIMUM(my_column - 10, 0);
HRJ
fuente
De manera relacionada, puede crear un conjunto de datos de unión y luego maximizarlo, en sql-server al menos stackoverflow.com/questions/124417/…
Kzqai

Respuestas:

298

Echa un vistazo a MAYOR y MENOS .

UPDATE my_table
SET my_column = GREATEST(my_column - 10, 0);
Mark Byers
fuente
17

Desea el sql en línea case:

set my_column = case when my_column - 10 > 0 then my_column - 10 else 0 end

max() es una función agregada y obtiene el máximo de una fila de un conjunto de resultados.

Editar: oops, no sabía greatesty leasten postgres. Use eso en su lugar.

Donnie
fuente
10
Esta versión es útil si está restringido a SQL estándar.
Don Kirkby