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.