Използвайте COALESCE
за да избегнете този резултат.
ИЗБЕРЕТЕ КОАЛЕСЦИЯ(SUM(колона),0)ОТ таблицаWHERE ...
За да го видите в действие, моля, вижте тази sql цигулка:http://www .sqlfiddle.com/#!2/d1542/3/0
Повече информация:
Дадени са три таблици (една с всички числа, една с всички нули и една със смес):
Настройка на схемата на MySQL 5.5.32 :
СЪЗДАВАНЕ НА ТАБЛИЦА 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) СТОЙНОСТИ(1),(2),(3),(4),(5),(6);СЪЗДАВАНЕ НА ТАБЛИЦА baz( id INT NOT NULL AUTO_INCREMENT ПРАВИЛЕН КЛЮЧ, val INT);INSERT INTO baz (val) VALUES(null),(null),(null),(null),(null),(null);
Запитване 1 :
ИЗБЕРЕТЕ 'foo' като table_name, 'mixed null/non-null' като описание, 21 като очаквана_сума, COALESCE(SUM(val), 0) като действителен_sumFROM fooUNION ALLSELECT 'bar' като table_name, 'all non -null' като описание, 21 като очаквана_сума, COALESCE(SUM(val), 0) като действителна_сумаFROM barUNION ALLSELECT 'baz' като име_на таблица, 'all null' като описание, 0 като очаквана_сума, COALESCE(SUM(val), 0) като действителна_сумаFROM база
<предварителен код>| TABLE_NAME | ОПИСАНИЕ | EXPECTED_SUM | АКТУАЛНА_СУМА ||------------|---------------------|------------ --|------------|| foo | смесено нула/не-нула | 21 | 21 || бар | всички ненулеви | 21 | 21 || база | всички нула | 0 | 0 |