Comment récupérer « 0 » de la fonction SUM de MySQL lorsqu'aucune valeur n'existe
La fonction SUM de MySQL offre un moyen pratique d'agréger des valeurs numériques valeurs. Cependant, lorsqu'aucune ligne correspondante n'est trouvée lors de la requête, la fonction SUM renvoie généralement une valeur NULL. Pour certains cas d'utilisation, il peut être plus souhaitable de renvoyer « 0 » au lieu de NULL.
Utiliser COALESCE pour résoudre le problème
La solution à ce problème réside dans la fonction COALESCE. COALESCE vous permet de spécifier une valeur par défaut à renvoyer lorsque le premier argument est évalué à NULL.
Considérez l'exemple suivant :
SELECT COALESCE(SUM(Column_1),0) FROM Table WHERE Column_2 = 'Test'
Dans cette requête, COALESCE entoure la fonction SUM. Si la SOMME de Column_1 pour les lignes où Column_2 est égal à « Test » renvoie une valeur NULL, COALESCE fournira à la place « 0 ».
Démonstration et plus d'informations
Visitez http ://www.sqlfiddle.com/#!2/d1542/3/0 pour une démonstration en direct de la solution.
Pour approfondir les nuances de COALESCE, considérons le scénario suivant impliquant trois tables avec des distributions de valeurs :
En appliquant la requête suivante :
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
Vous obtiendrez les résultats suivants :
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 |
Comme vous pouvez observer, la fonction COALESCE renvoie efficacement « 0 » pour la table « baz », où toutes les valeurs sont NULL.
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!