MySQL'de maksimum iki değer nasıl elde edilir?


290

Denedim ama başarısız oldu:

mysql> select max(1,0);
HATA 1064 (42000): SQL sözdiziminizde bir hata var; kılavuzu kontrol et
doğru sözdiziminin kullanılması için MySQL sunucu sürümünüze karşılık gelir 
1. satırda '0)' yakınında

Yanıtlar:


528

GREATEST () kullan

Örneğin:

SELECT GREATEST(2,1);

Not: O sırada herhangi bir değer null içeriyorsa, bu işlev her zaman null değerini döndürür (user @ sanghavi7 sayesinde)


41
akılda tutulması gereken bir şey var ki, herhangi bir değer null o zaman null içeriyorsa, bu fonksiyon her zaman null cevabı olarak döndürür!
sanghavi7

33
Orada daLEAST
bobobobo

1
nasıl bir alt GREATESTsütun için değerleri alabilirsiniz böylece bir parametre olarak bir alt sorgu çalıştırabilirsiniz
Junaid Qadir

17
Null ile ilgili sorunu önlemek için ifnull kullanabilirsiniz. Örneğin select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;size tarih vereceğim 1.
Christoph Grimmer-Dietrich

1
Bazı değerler boş olabilirse, şunları yapabilirsinizGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean

27

Bir satır kümesindeki bir sütunun maksimum değerini almak için:

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

Her satır için bir dizi sütun, değişmez değer veya değişkenin maksimum değerini almak için:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results

3
İle null değerlere dikkat edin GREATEST. Herhangi bir null değer, işlevin null değerine dönmesine neden olur. Bunu önlemek için şunları yapabilirsinizGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean

5

En büyük işlevi nullable olmayan alanlarda kullanabilirsiniz. Bu değerlerden biri (veya her ikisi birden) NULL ise, kullanmayın (sonuç NULL olabilir).

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

NULL değerini tercih ettiğiniz varsayılan değere değiştirebilirsiniz (her iki değer de NULL ise).


1
Bu yüzden dürüstçe MySQL'den nefret ediyorum. Böyle basit bir şey yapmak için ne kadar büyük bir iş.
Monica Heddneck

9
Bu basitçe değiştirilebilir select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. Çok karmaşık
Kyborek

1
Bazı değerler boş olabilirse, şunları yapabilirsinizGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.