Powiedzmy, że mam prostą funkcję w MySQL:
SELECT SUM(Column_1)
FROM Table
WHERE Column_2 = 'Test'
Jeśli żadne wpisy w Column_
2 nie zawierają tekstu `` Test '', ta funkcja zwraca NULL
, podczas gdy chciałbym, aby zwracała 0.
Zdaję sobie sprawę, że podobne pytanie zostało tutaj zadane kilka razy, ale nie byłem w stanie dostosować odpowiedzi do moich celów, więc byłbym wdzięczny za pomoc w rozwiązaniu tego problemu.
Odpowiedzi:
Użyj,
COALESCE
aby uniknąć tego wyniku.Aby zobaczyć to w akcji, zobacz to sql fiddle: http://www.sqlfiddle.com/#!2/d1542/3/0
Więcej informacji:
Biorąc pod uwagę trzy tabele (jedna ze wszystkimi liczbami, jedna ze wszystkimi zerami i jedna z mieszanką):
SQL Fiddle
Konfiguracja schematu MySQL 5.5.32 :
Zapytanie 1 :
Wyniki :
źródło
SUM
działa zgodnie z oczekiwaniamiAVG
iCOUNT
może dawać różne wyniki, gdy otrzymujeszNULL
monit o użycieCOALESCE
zgodnie z sugestią @DarkSide, w zależności od pożądanego wyniku.Użyj
IFNULL
lubCOALESCE
:Różnica między nimi polega na tym, że
IFNULL
jest to rozszerzenie MySQL, które przyjmuje dwa argumenty iCOALESCE
jest standardową funkcją SQL, która może przyjmować jeden lub więcej argumentów. Gdy masz tylko dwa argumenty, użycieIFNULL
jest nieco szybsze, chociaż tutaj różnica jest nieistotna, ponieważ jest wywoływana tylko raz.źródło
IFNULL
czyCOALESCE
?? czy mógłbyś to wyjaśnić?coalesce
.Nie można uzyskać dokładnie tego, o co pytasz, ale jeśli używasz funkcji zagregowanej SUMA, co oznacza, że grupujesz tabelę.
Zapytanie dotyczy MYSQL w ten sposób
źródło