So behandeln Sie NULL-Werte in der MySQL-SUM-Funktion
In MySQL geben SUM-Funktionen oft NULL zurück, wenn keine Werte gefunden werden, was passieren kann unbequem sein. In diesem Artikel erfahren Sie, wie Sie mit der COALESCE-Funktion sicherstellen, dass SUM immer „0“ zurückgibt, wenn keine Werte gefunden werden.
Problem:
Stellen Sie sich eine Abfrage wie die folgende vor:
<code class="sql">SELECT SUM(Column_1) FROM Table WHERE Column_2 = 'Test'</code>
Wenn in Spalte_2 keine Einträge vorhanden sind, die die Kriterien erfüllen, gibt die Funktion NULL zurück. Möglicherweise bevorzugen wir jedoch stattdessen die Rückgabe von „0“.
Lösung: Verwendung von COALESCE
Um dieses Problem zu beheben, verwenden Sie die Funktion COALESCE. COALESCE akzeptiert mehrere Werte als Argumente und gibt den ersten Nicht-NULL-Wert zurück. Indem wir es zusammen mit der SUMME-Funktion verwenden, können wir sicherstellen, dass das Ergebnis immer „0“ ist, wenn NULL angetroffen wird.
<code class="sql">SELECT COALESCE(SUM(column),0) FROM table WHERE ...</code>
Beispiel:
Verwenden wir a SQL-Geige zur Demonstration der COALESCE-Funktion: http://www.sqlfiddle.com/#!2/d1542/3/0
Zusätzliche Informationen:
Die COALESCE Die Funktion kann auch mit anderen Funktionen verwendet werden, um NULL-Werte zu verarbeiten. Hier ist ein Beispiel mit drei Tabellen mit unterschiedlichen Werten:
MySQL 5.5.32-Schema-Setup:
<code class="sql">CREATE TABLE foo ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO foo (val) VALUES (null), (1), (null), (2), (null), (3), (null), (4), (null), (5), (null), (6), (null); CREATE TABLE bar ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO bar (val) VALUES (1), (2), (3), (4), (5), (6); CREATE TABLE baz ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO baz (val) VALUES (null), (null), (null), (null), (null), (null);</code>
Abfrage:
<code class="sql">SELECT 'foo' as table_name, 'mixed null/non-null' as description, 21 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM foo UNION ALL SELECT 'bar' as table_name, 'all non-null' as description, 21 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM bar UNION ALL SELECT 'baz' as table_name, 'all null' as description, 0 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM baz</code>
Ergebnisse:
TABLE_NAME | DESCRIPTION | EXPECTED_SUM | ACTUAL_SUM |
---|---|---|---|
foo | mixed null/non-null | 21 | 21 |
bar | all non-null | 21 | 21 |
baz | all null | 0 | 0 |
Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass die MySQL-SUM-Funktion NULL zurückgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!