Bagaimana cara mendapatkan maks dua nilai di MySQL?

289

Saya mencoba tetapi gagal:

mysql> select max(1,0);
GALAT 1064 (42000): Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manualnya
yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan 
dekat '0)' pada baris 1
Topeng
sumber

Jawaban:

527

Gunakan TERBESAR ()

Misalnya:

SELECT GREATEST(2,1);

Catatan: Kapan pun jika ada nilai tunggal yang mengandung nol pada waktu itu, fungsi ini selalu mengembalikan nol (Terima kasih kepada pengguna @ sanghavi7)

NinethSense
sumber
41
satu hal yang perlu diingat bahwa setiap kali jika ada nilai tunggal mengandung nol pada waktu itu, fungsi ini selalu mengembalikan null sebagai jawaban!
sanghavi7 7
33
Ada jugaLEAST
bobobobo
1
bagaimana saya bisa menjalankan sub kueri sebagai parameter GREATESTsehingga saya bisa mendapatkan nilai untuk kolom cirtain
Junaid Qadir
17
Untuk mencegah masalah dengan null Anda dapat menggunakan ifnull. Misalnya select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;akan membuat Anda berkencan1.
Christoph Grimmer-Dietrich
1
Jika beberapa nilai mungkin nol, Anda dapat melakukannyaGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
27

Untuk mendapatkan nilai maksimum kolom di seluruh rangkaian baris:

SELECT MAX(column1) FROM table; -- expect one result

Untuk mendapatkan nilai maksimum dari serangkaian kolom, literal, atau variabel untuk setiap baris:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results
cs_alumnus
sumber
3
Perhatikan nilai null dengan GREATEST. Nilai nol apa pun akan menyebabkan fungsi mengembalikan nol. Untuk mencegahnya, Anda bisa melakukannyaGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
5

Anda dapat menggunakan fungsi TERBESAR dengan bidang yang tidak dapat dibatalkan. Jika salah satu dari nilai ini (atau keduanya) bisa NULL, jangan gunakan itu (hasilnya bisa NULL).

select 
    if(
        fieldA is NULL, 
        if(fieldB is NULL, NULL, fieldB), /* second NULL is default value */
        if(fieldB is NULL, field A, GREATEST(fieldA, fieldB))
    ) as maxValue

Anda dapat mengubah NULL ke nilai default pilihan Anda (jika kedua nilai tersebut NULL).

Leonid Zakharov
sumber
1
Inilah sebabnya saya jujur ​​membenci MySQL. Betapa besarnya pekerjaan yang harus dilakukan untuk hal yang begitu sederhana.
Monica Heddneck
9
Ini bisa dengan mudah diganti select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. Ini terlalu rumit
Kyborek
1
Jika beberapa nilai bisa nol, Anda bisa melakukannyaGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean