답변:
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