Comment gérer les valeurs NULL dans la fonction MySQL SUM
Dans MySQL, les fonctions SUM renvoient souvent NULL lorsqu'aucune valeur n'est trouvée, ce qui peut être gênant. Cet article explique comment utiliser la fonction COALESCE pour garantir que SUM renvoie toujours « 0 » lorsqu'aucune valeur n'est trouvée.
Problème :
Considérons une requête telle que :
<code class="sql">SELECT SUM(Column_1) FROM Table WHERE Column_2 = 'Test'</code>
S'il n'y a aucune entrée dans Column_2 qui répond aux critères, la fonction retournera NULL. Cependant, nous préférerons peut-être qu'il renvoie « 0 » à la place.
Solution : Utilisation de COALESCE
Pour résoudre ce problème, utilisez la fonction COALESCE. COALESCE prend plusieurs valeurs comme arguments et renvoie la première valeur non NULL. En l'utilisant avec la fonction SUM, nous pouvons garantir que le résultat est toujours « 0 » lorsque NULL est rencontré.
<code class="sql">SELECT COALESCE(SUM(column),0) FROM table WHERE ...</code>
Exemple :
Utilisons un Violon SQL pour démontrer la fonction COALESCE : http://www.sqlfiddle.com/#!2/d1542/3/0
Informations supplémentaires :
La COALESCE La fonction peut également être utilisée avec d’autres fonctions pour gérer les valeurs NULL. Voici un exemple utilisant trois tables avec des valeurs différentes :
Configuration du schéma MySQL 5.5.32 :
<code class="sql">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);</code>
Requête :
<code class="sql">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</code>
Résultats :
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 |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!