Como obter min / max de dois números inteiros no Postgres / SQL?

146

Como encontro o máximo (ou mínimo) de dois números inteiros no Postgres / SQL? Um dos números inteiros não é um valor da coluna.

Vou dar um exemplo de cenário:

Gostaria de subtrair um número inteiro de uma coluna (em todas as linhas), mas o resultado não deve ser menor que zero. Então, para começar, eu tenho:

UPDATE my_table
SET my_column = my_column - 10;

Mas isso pode tornar alguns dos valores negativos. O que eu gostaria (em pseudo código) é:

UPDATE my_table
SET my_column = MAXIMUM(my_column - 10, 0);
HRJ
fonte
De maneira semelhante, você pode criar um conjunto de dados de união e, no máximo, isso, no sql-server pelo menos stackoverflow.com/questions/124417/…
Kzqai

Respostas:

296

Dê uma olhada em MAIOR e MENOR .

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

Você deseja o sql embutido case:

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

max() é uma função agregada e obtém o máximo de uma linha de um conjunto de resultados.

Edit: oops, não sabia sobre greateste leastno postgres. Use isso em seu lugar.

Donnie
fonte
10
Esta versão é útil se você estiver restrito ao SQL padrão.
quer