sql >> Database teknologi >  >> RDS >> Mysql

Hvordan får jeg SUM-funktionen i MySQL til at returnere '0', hvis der ikke findes nogen værdier?

Brug COALESCE for at undgå det resultat.

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

For at se det i aktion, se venligst denne sql violin:http://www .sqlfiddle.com/#!2/d1542/3/0

Flere oplysninger:

Givet tre tabeller (en med alle tal, en med alle nuller og en med en blanding):

SQL violin

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

Forespørgsel 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
 

Resultater :

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

  1. Får [archiver] ikke-understøttet version (1.13) i filhovedet, når du kører pg_restore

  2. Ugyldigt parameternummer:antallet af bundne variable stemmer ikke overens med antallet af tokens i Doctrine

  3. Konverter adgang til PostgreSQL?

  4. Hvad er forskellen mellem at bruge INDEX vs KEY i MySQL?