답변:
COALESCE그 결과를 피하기 위해 사용하십시오 .
SELECT COALESCE(SUM(column),0)
FROM table
WHERE ...
실제로 사용하려면 다음 SQL 바이올린을 참조하십시오. http://www.sqlfiddle.com/#!2/d1542/3/0
추가 정보:
세 개의 테이블이 있습니다 (하나는 모든 숫자, 하나는 모두 널, 하나는 혼합).
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);
쿼리 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
결과 :
| 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 |
SELECT IFNULL(SUM(Column1), 0) AS total FROM...
SELECT COALESCE(SUM(Column1), 0) AS total FROM...
차이점 IFNULL은 두 개의 인수를 사용하는 MySQL 확장이며 COALESCE하나 이상의 인수를 사용할 수있는 표준 SQL 함수입니다. 두 개의 인수 만 사용 IFNULL하면 약간 빠르지 만 여기서는 한 번만 호출되므로 차이가 중요하지 않습니다.
IFNULL또는 COALESCE?? 설명해 주시겠습니까?
coalesce.
원하는 것을 정확히 얻을 수는 없지만 집계 SUM 함수를 사용하는 경우 테이블을 그룹화하고 있음을 의미합니다.
쿼리는 다음과 같이 MYSQL을 사용합니다.
Select IFNULL(SUM(COLUMN1),0) as total from mytable group by condition