Maison  >  Article  >  base de données  >  Comment empêcher la fonction MySQL SUM de renvoyer NULL ?

Comment empêcher la fonction MySQL SUM de renvoyer NULL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 07:22:30149parcourir

How to Prevent MySQL SUM Function from Returning NULL?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn