2009-09-28 9 views
2

J'ai une table regardant quelque chose comme ceci:Les valeurs par défaut pour COUNT dans MySQL

+-------+-----+ 
|country|prop1| 
+-------+-----+ 
|RO  | 1 | 
|RO  | 2 | 
|UK  | 1 | 
|IT  | 2 | 
+-------+-----+ 

Je veux compter les lignes pour lesquelles la prop1 est non nul et j'utilise la sélection suivante:

SELECT `country`, COUNT(*) as number FROM table GROUP BY `country`; 

ce sera de retour:

+-------+------+ 
|country|number| 
+-------+------+ 
|RO  | 2 | 
|UK  | 1 | 
|IT  | 1 | 
+-------+------+ 

mais je besoin des éléments suivants:

+-------+------+ 
|country|number| 
+-------+------+ 
|RO  | 2 | 
|UK  | 1 | 
|IT  | 1 | 
|FR  | 0 | 
+-------+------+ 

Pensez-vous que quelque chose comme cela peut être possible d'écrire directement dans SQL? Je pensais quelque chose comme spécifier la liste des valeurs possibles pour "pays" et une valeur par défaut (0) si elle n'est pas trouvée dans la table.

Répondre

4

Il est pas évident dans votre exemple où le FR vient.

MySQL n'a pas une liste de pays à l'intérieur, donc les codes de pays devraient être pris quelque part.

Si vous avez tous les pays à l'intérieur mytable (avec prop éventuellement mis à NULL):

SELECT country, COUNT(prop) as number 
FROM mytable 
GROUP BY 
     country 

Si vous avez des pays dans une table séparée (et un pays peut-être manquant dans mytable):

SELECT c.id, COUNT(m.prop) as number 
FROM countries c 
LEFT JOIN 
     mytable m 
ON  m.country = c.id 
GROUP BY 
     c.id 
1

Je pense que vous devrez mettre en place une table avec tous les pays. Il vaudra mieux modifier votre table actuelle pour utiliser les clés des pays. Alors que vous pouvez faire une jointure à gauche. Cela vous donnera tous les pays, avec des valeurs NULL s'il n'y a pas d'accessoires pour ce pays.

Questions connexes