Disons que j'ai une fonction simple dans MySQL:
SELECT SUM(Column 1) from Table WHERE Column 2='Test'
Si aucune entrée de la colonne 2 ne contient le texte 'Test', cette fonction renvoie NULL, alors que j'aimerais qu'elle renvoie 0.
Je sais qu'une question similaire a été posée à quelques reprises ici, mais je n'ai pas été en mesure d'adapter les réponses à mes objectifs, donc je serais reconnaissant de l'aide pour résoudre ce problème.
Utilisez COALESCE
pour éviter ce résultat.
SELECT COALESCE(SUM(column),0)
FROM table
WHERE ...
Pour le voir en action, voyez ce violon SQL: http://www.sqlfiddle.com/#!2/d1542/3/
Plus d'information:
Étant donné trois tables (une avec tous les nombres, une avec toutes les valeurs nulles et une avec un mélange):
Configuration du schéma 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);
Requête 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...
La différence entre eux est que IFNULL
est une extension MySQL prenant deux arguments, et COALESCE
est une fonction SQL standard pouvant prendre un ou plusieurs arguments. Lorsque vous ne disposez que de deux arguments, utiliser IFNULL
est légèrement plus rapide, mais ici la différence est insignifiante car elle n'est appelée qu'une fois.
Vous ne pouvez pas obtenir exactement ce que vous demandez, mais si vous utilisez une fonction d'agrégation SUM, ce qui implique que vous groupez la table.
La requête va pour MYSQL comme ceci
Select IFNULL(SUM(COLUMN1),0) as total from mytable group by condition