valeur par defaut pour count()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : valeur par defaut pour count()

Re: valeur par defaut pour count()

par Mazarini » 18 août 2011, 11:22

Je pense que notre invité se posait la question de ce que retournait un "select count..." sur une table vide.

Re: valeur par defaut pour count()

par Cyrano » 18 août 2011, 10:21

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()

par Mazarini » 18 août 2011, 10:10

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()

par Cyrano » 17 août 2011, 16:30

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()

par Mazarini » 17 août 2011, 16:20

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()

par Cyrano » 17 août 2011, 06:16

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 ».

valeur par defaut pour count()

par Invité » 16 août 2011, 20:21

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.