回答:
COALESCE
その結果を回避するために使用します。
SELECT COALESCE(SUM(column),0)
FROM table
WHERE ...
実際の動作を確認するには、次のSQLフィドルを参照してください。http://www.sqlfiddle.com/#!2 / d1542 / 3/0
詳しくは:
3つのテーブルが与えられた場合(1つはすべて数値、1つはすべてnull、1つは混合):
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
は、2つの引数を取るMySQL拡張でCOALESCE
あり、1つ以上の引数を取ることができる標準SQL関数であることです。引数が2つしかない場合IFNULL
は、使用する方がわずかに速くなりますが、1回しか呼び出されないため、ここでは違いはわずかです。
IFNULL
又はCOALESCE
?説明していただけますか?
coalesce
。
あなたが求めているものを正確に取得することはできませんが、テーブルをグループ化していることを意味する集約SUM関数を使用している場合。
クエリはこのようにMYSQLに行きます
Select IFNULL(SUM(COLUMN1),0) as total from mytable group by condition