2012-04-16 26 views
17

Chciałbym zrozumieć, jak ustawić 0 wartość atrybutu, gdy jest NULL z funkcją MAX. Na przykład:Jak ustawić 0 z funkcją MAX, gdy jest NULL?

Name columns: 
number - date 

Values: 
10 - 2012-04-04 
11 - 2012-04-04 
12 - 2012-04-04 
13 - 2012-04-15 
14 - 2012-06-21 
1 - 2013-07-04 

Liczba jest polem przyrostowym, ale ustawiła się 1 po nadejściu nowego roku. Ale wynik:

SELECT (MAX(number)+1) number WHERE date LIKE "2014%" 

jest NULL, a nie 1, ponieważ MAX (liczba) jest NULL, a nie 0

Odpowiedz

31

Cóż, jak nie ma daty jak 2014, to spodziewałbym null, bo maksimum nic tak właściwie nie jest.

Ale to zrobić:

COALESCE(MAX(number),0) 

Co oznacza: zdobyć pierwszy niezerowym rzeczy od następnej listy, więc jeśli max jest zerowy, to to daje 0

+0

Dzięki "tak bardzo! ;-) – Donovant

+0

Jego standard mysql, który wyświetla wynik "null", gdy nie ma wyniku, nie znajduje się "0". Możesz użyć 'COALESCE (MAX (liczba), 0)' jak mówi 'Nanne'. –

12

COALESCE działa ale IFNULL wydaje mi się jaśniejszy.

IFNULL(MAX(number), 0) 

Jeśli pierwsze wyrażenie nie ma wartości NULL, funkcja IFNULL() zwraca samo wyrażenie, w przeciwnym razie zwraca drugi parametr. Funkcja IFNULL() zwraca wartość liczbową lub łańcuchową, w zależności od kontekstu, w którym jest używana.