Bagaimana cara mendapatkan min / maks dua bilangan bulat di Postgres / SQL?

147

Bagaimana cara menemukan maksimum (atau minimum) dari dua bilangan bulat di Postgres / SQL? Salah satu bilangan bulat bukan nilai kolom.

Saya akan memberikan contoh skenario:

Saya ingin mengurangi bilangan bulat dari kolom (dalam semua baris), tetapi hasilnya tidak boleh kurang dari nol. Jadi, untuk memulai, saya punya:

UPDATE my_table
SET my_column = my_column - 10;

Tetapi ini dapat membuat beberapa nilai menjadi negatif. Yang saya inginkan (dalam kode pseudo) adalah:

UPDATE my_table
SET my_column = MAXIMUM(my_column - 10, 0);
HRJ
sumber
Terkait Anda dapat membuat kumpulan data serikat dan kemudian maks itu, di sql-server setidaknya stackoverflow.com/questions/124417/…
Kzqai

Jawaban:

298

Silahkan lihat di GREATEST and LEAST .

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

Anda ingin inline sql case:

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

max() adalah fungsi agregat dan mendapatkan maksimum satu baris dari set hasil.

Sunting: oops, tidak tahu tentang greatestdan leastdi postgres. Gunakan itu sebagai gantinya.

Donnie
sumber
10
Versi ini berguna jika Anda terbatas pada SQL standar.
Don Kirkby