Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak sprawić, by funkcja SUM w MySQL zwróciła „0”, jeśli nie znaleziono żadnych wartości?

Użyj COALESCE aby uniknąć tego wyniku.

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

Aby zobaczyć to w akcji, zobacz te skrzypce sql:http://www .sqlfiddle.com/#!2/d1542/3/0

Więcej informacji:

Biorąc pod uwagę trzy tabele (jedna ze wszystkimi liczbami, jedna ze wszystkimi wartościami null i jedna z mieszanką):

SQL Fiddle

Konfiguracja schematu MySQL 5.5.32 :

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

Zapytanie 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

Wyniki :

| 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kontynuacja:jak modelować rabaty na pozycje w bazie danych?

  2. MySQL:Ustaw zmienną użytkownika z wyniku zapytania

  3. Naruszenie ograniczeń przy utrzymywaniu relacji jeden do wielu

  4. Przechowywanie bardzo dużych liczb całkowitych w MySQL

  5. Sterownik mysql jdbc nie obsługuje ograniczników w wyzwalaczach z wieloma instrukcjami