Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie bekomme ich die SUM-Funktion in MySQL dazu, „0“ zurückzugeben, wenn keine Werte gefunden werden?

Verwenden Sie COALESCE um dieses Ergebnis zu vermeiden.

SELECT COALESCE(SUM(column),0)
FROM   table
WHERE  ...

Um es in Aktion zu sehen, sehen Sie sich bitte diese SQL-Fiddle an:http://www .sqlfiddle.com/#!2/d1542/3/0

Weitere Informationen:

Gegeben seien drei Tabellen (eine mit allen Zahlen, eine mit allen Nullen und eine mit einer Mischung):

SQL-Geige

MySQL 5.5.32-Schema-Setup :

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);

Abfrage 1 :

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

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 |