j'ai une requête SQL comme ceci:Groupe par comptage (*) et 0 au lieu de vide
SELECT date_format(`user_date_accountcreated`, "%Y-%m-%d") as date, Count(*) as total from users
where `user_date_accountcreated`
BETWEEN '2016-09-18 00:00:00' AND '2016-10-03 23:59:59'
GROUP BY date_format(`user_date_accountcreated`, "%y%m%d")
Mais quand il n'y a pas Reccords, je résultat vide à cause de GROUP BY
, il n'y a rien à groupe. ..
J'ai essayé avec ISNULL
comme ceci:
SELECT date_format(`user_date_accountcreated`, "%Y-%m-%d") as date, ISNULL(Count(*), 0) as total from users
where `user_date_accountcreated` BETWEEN '2016-09-18 00:00:00' AND '2016-10-03 23:59:59'
GROUP BY date_format(`user_date_accountcreated`, "%y%m%d")
Mais je reçois une erreur SQL: # 1582 - nombre de paramètres incorrect dans l'appel à la fonction native 'ISNULL'
Une chance d'obtenir 0 au lieu du résultat vide lorsque nous utilisons un GROUP BY
?
count() est une fonction d'agrégation. son résultat n'est pas disponible avant que toutes les lignes aient été prises en compte. Vous l'utilisez dans une fonction isnull(), qui est évaluée sur une base par ligne. Les bases de données ne peuvent pas voyager dans le temps, elles ne peuvent donc pas fournir rétroactivement une valeur de comptage "final" (*) à isnull au moment où l'isnull est réellement évalué. et bien sûr, RTFM: [isnull()] (http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_isnull) il ne prend qu'un argument, exactement comme votre erreur l'indique. –
vous voulez probablement [coalesce()] (http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce) à la place. –
@MarcB Je pense que son problème est que la condition «WHERE» filtre complètement les enregistrements, laissant son ensemble de résultats manquer certaines données au fil du temps, car il ne correspondait pas aux critères. La vérification de 0, null, etc., ne portera pas ses fruits car les documents ne seront tout simplement pas là. –