Page 1 sur 1

valeur par defaut pour count()

Posté : 16 août 2011, 20:21
par Invité
Bonjour à tous,

y a t il un moyen de forcer une requete MYSQL à retourner une valeur par défaut pour COUNT(monChamp) quand aucun enregistrement n'a été trouvé?

en vous remerciant pour vos réponses.

Re: valeur par defaut pour count()

Posté : 17 août 2011, 06:16
par Cyrano
Oui, utilise IFNULL :
SELECT
  IFNULL(
    count(monchamp),
    0
  ) AS nombre
FROM matable
Cet exemple retournera soit la valeur correspondant à l'agrégat COUNT() s'il existe au moins une valeur pour une ligne dans la colonne « monchamp », soit 0 si le retour du COUNT() vaut NULL.

Libre à toi d'indiquer une autre valeur par défaut. Et on met un alias pour récupérer plus facilement la valeur, ici « nombre ».

Re: valeur par defaut pour count()

Posté : 17 août 2011, 16:20
par Mazarini
Il me semble que count retourne toujours une ligne et une seule dans le mesure ou on utilise pas de "group by"

Re: valeur par defaut pour count()

Posté : 17 août 2011, 16:30
par Cyrano
Il me semble que count retourne toujours une ligne et une seule dans le mesure ou on utilise pas de "group by"
Absolument, et ça ne change rien : rien ne t'empêche d'indiquer une valeur par défaut, même avec un GROUP BY, si le comptage retourne NULL pour un ou plusieurs des regroupements. J'ajoute que j'utilise ce genre de fonction assez régulièrement.
Ceci étant, il faut préciser qu'il y a peu de chance pour que COUNT() retourne NULL : ça ne pourrait arriver que s'il y a une jointure externe avec la table où est effectué le comptage et où il n'y a aucune correspondance.

Il reste aussi la possibilité d'utiliser IF() avec trois paramètres :
  1. La condition à vérifier;
  2. La valeur à retourner si la condition retourne TRUE;
  3. La valeur par défaut si la condition retourne FALSE;

Re: valeur par defaut pour count()

Posté : 18 août 2011, 10:10
par Mazarini
En fait, j'ai du mal à imaginer qu'un count() puisse puisse retourner autre chose qu'un entier quand bien même la colonne comptée soit toujours null. Pour moi le count compte le nombre de fois qu'une colonne est non null ou le nombre d'enregistrement.

Par contre, dans le cas d'un d'un group by, il est possible de ne pas retourner de ligne.

Re: valeur par defaut pour count()

Posté : 18 août 2011, 10:21
par Cyrano
Tu m'as filé un doute, du coup j'ai fait quelques vérifications, et c'est toi qui a raison, j'ai fait une confusion : COUNT() retourne toujours un entier. Donc ma suggestion IFNULL sur un COUNT n'a pas de sens. Par contre on peut vouloir une valeur par défaut pour remplacer une valeur de retour égale à zéro, et dans ce cas c'est le IF() qu'il faut utiliser. On peut aussi vouloir définir une valeur binaire selon qu'il y a ou non un résultat supérieur à zéro, exemple :
SELECT IF(
  COUNT(ec.ech_id) > 0,
  1,
  0
) AS echeancier
FROM etc...
Et ici le retour sera toujours égal à 0 ou 1 selon que le nombre de lignes trouvées est supérieur à zéro ou non.

Enfin bon, ce sont des possibilités, reste à savoir ce que veut réellement obtenir notre invité.

Re: valeur par defaut pour count()

Posté : 18 août 2011, 11:22
par Mazarini
Je pense que notre invité se posait la question de ce que retournait un "select count..." sur une table vide.