ich eine SQL-Anfrage wie diese:Gruppe von count (*) und 0 statt leeren
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")
Aber wenn es keine reccords ist, ich habe leeres Ergebnis wegen GROUP BY
, gibt es nichts zu gruppieren. ..
ich habe versucht, mit ISNULL
wie folgt aus:
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")
Aber ich einen SQL-Fehler: # 1582 - falsche Parameteranzahl im Aufruf von nativen Funktion 'ISNULL'
Gibt es eine Chance, 0 statt leeres Ergebnis zu erhalten, wenn wir eine GROUP BY
verwenden?
count() ist eine Aggregatfunktion. Das Ergebnis ist erst verfügbar, nachdem alle Zeilen berücksichtigt wurden. Sie verwenden es in einer isnull() - Funktion, die für jede Zeile ausgewertet wird. Datenbanken können keine Zeitreisen durchführen, daher können sie nicht rückwirkend einen "endgültigen" Zählwert (*) angeben, der zu dem Zeitpunkt, zu dem das Isnull tatsächlich ausgewertet wird, nicht gleich ist. und natürlich, RTFM: [isnull()] (http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_isnull) es dauert nur ein Argument, genau wie Ihr Fehler sagt. –
möchten Sie wahrscheinlich [coalesce()] (http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce) stattdessen. –
@MarcB Ich glaube, sein Problem ist, dass die 'WHERE'-Bedingung Datensätze vollständig filtert, so dass sein Ergebnis im Laufe der Zeit bestimmte Daten nicht enthält, weil es nicht den Kriterien entspricht. Die Überprüfung auf 0, null usw. bringt keine Früchte, weil die Aufzeichnungen einfach nicht da sind. –