MySql count() renvoie 0 si aucun enregistrement trouvé
J'ai un ensemble de postes sur une base mensuelle. Maintenant, j'ai besoin d'un tableau qui contient le nombre total des enregistrements de messages affichés dans chaque mois. J'ai essayé ci-dessous requête MySql, Sa fonctionne très bien, mais je m'attendais à 0(Zéro) pour les mois où il n'y a pas de documents. Ici, pas de retour 0.
J'ai lu que COUNT() ne sera pas de retour '0', Alors comment puis-je y parvenir?
J'ai essayé IFNULL(), et se rejoignent() mais toujours le même résultat. S'il vous plaît aider avec cette question. Merci......
SELECT
count(id) as totalRec
FROM ('post')
WHERE year(date) = '2013'
AND monthname(date) IN ('January', 'February', 'March')
GROUP BY year(date)-month(date)
ORDER BY 'date' ASC
Résultat Obtenu:
+----------+
| totalRec |
+----------+
| 7 |
| 9 |
+----------+
Résultat attendu (Où il n'y a pas de postes pour le mois de janvier):
+----------+
| totalRec |
+----------+
| 0 |
| 7 |
| 9 |
+----------+
Des Données De L'Échantillon:
+----+---------------------+
| id | date |
+----+---------------------+
| 24 | 2012-12-16 16:29:56 |
| 1 | 2013-02-25 14:57:09 |
| 2 | 2013-02-25 14:59:37 |
| 4 | 2013-02-25 15:12:44 |
| 5 | 2013-02-25 15:14:18 |
| 7 | 2013-02-26 11:31:31 |
| 8 | 2013-02-26 11:31:59 |
| 10 | 2013-02-26 11:34:47 |
| 14 | 2013-03-04 04:39:02 |
| 15 | 2013-03-04 05:44:44 |
| 16 | 2013-03-04 05:48:29 |
| 19 | 2013-03-07 15:22:34 |
| 20 | 2013-03-15 12:24:43 |
| 21 | 2013-03-16 16:27:43 |
| 22 | 2013-03-16 16:29:28 |
| 23 | 2013-03-16 16:29:56 |
| 11 | 2013-03-17 11:35:12 |
+----+---------------------+
pouvez-vous donner des exemples d'enregistrements où l'on peut jouer avec?
Votre groupe par des regards incorrect
J'ai édité ma question avec des exemples de données..
Votre groupe par des regards incorrect
J'ai édité ma question avec des exemples de données..
OriginalL'auteur sravis | 2013-05-19
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de record pour le mois de
January
c'est pourquoi vous obtenez pas de résultat. Une solution qui fonctionne est de se joindre à une sous-requête avec contient la liste de mois que vous souhaitez figurer sur la liste.SORTIE
WOW, Merci beaucoup. J'ai essayé de passé 1 heure pour obtenir ce résultat, Enfin vous avez sauvé mon temps. Merci beaucoup..
J'ai ajouté avril Mois de la liste de sélection dans votre JSfiddle exemple, donc le résultat devrait être [0,7,9,0] mais son montrant [0,7,9]. Pouvez vous s'il vous plaît voir pour une fois? sqlfiddle.com/#!2/e0a6e/15
ici, sqlfiddle.com/#!2/e0a6e/22
Cela m'a vraiment aidé à faire quelque chose qui est similaire:--get nombre de pots utilisés et suivant1 utiliser les plantes vont sélectionner un.pot, count(b.pot_info) as nombre from (select pot_info comme le pot de pots union select suivant1 de pots)une jointure gauche plantes b sur une.pot=b.pot_info groupe par une.pot de commande par un.pot
OriginalL'auteur John Woo
COALESCE
est ce que vous pourriez utiliser, si vous avez une table de dates et gauche rejoint contre elle. Il en va de la gauche vers la droite pour revenir à la première valeur non nulle.Votre groupe en a l'air un peu de noisette à la minute, j'ai ajusté.
Où les dates de table est..
Voir ici : http://easywebapps.blogspot.co.uk/2011/07/mysql-how-to-create-calendar-table.html
Désolé, j'ai raté la date de création de la table de bits, c'est important
OriginalL'auteur Paul Stanley
Avez-vous essayé
IFNULL()
de la bonne façon? Peut-être essayerIFNULL(Count(id), 0)
dans unSELECT
clause de jointure.OriginalL'auteur octoback
Si le résultat n'avait pas de postes au cours de cette période de temps, vous n'aurez pas de résultats à compter, donc pourquoi il ne montre pas.
Vous auriez besoin de se joindre à une autre table qui a tout de l'année, mois ou compléter les données par programmation lorsque les résultats sont renvoyés. Je ne peux pas penser à une autre façon de le faire, mais c'est peut-être possible.
Aussi, comme d'autres l'ont dit, séparer le groupe par une virgule.
OriginalL'auteur Justin
Je pense que vous avez simplement besoin de requête comme ceci
exemple vb
puis écrire
OriginalL'auteur MRRaja