COUNT()
ist eine Aggregationsfunktion, die üblicherweise mit einem GROUP BY
kombiniert wird Klausel.
curdate()
ist eine Datumsfunktion, die das aktuelle Datum ausgibt.
Nur MySQL (soweit ich weiß) erlaubt diese Syntax ohne Verwendung von GROUP BY
Klausel. Da Sie es nicht angegeben haben, COUNT(*)
zählt die Gesamtzahl der Zeilen in der Tabelle und den owner
Spalte wird nach dem Zufallsprinzip/Optimierer-Standard/durch Indizes ausgewählt.
Dies sollte Ihre Abfrage sein:
select owner, count(*)
from pet
group by owner;
Das weist den Optimierer an, die Gesamtzeilen für jeden zu zählen Besitzer.
Wenn keine Gruppieren-nach-Klausel erwähnt wird, werden die Aggregationsfunktionen auf die gesamten Daten der Tabelle angewendet.
BEARBEITEN: Eine Zählung, die auf jede Zeile angewendet wird, kann normalerweise nicht mit COUNT()
durchgeführt werden und normalerweise mit einer Analysefunktion verwendet -> COUNT() OVER(PARTITION...)
die es in MySQL leider nicht gibt. Ihre andere Möglichkeit besteht darin, eine JOIN/CORRELATED QUERY
zu erstellen für diese zusätzliche Spalte.
Noch eine Bearbeitung: Wenn Sie neben jedem Eigentümer die Gesamtzahl ermitteln möchten, können Sie eine Unterabfrage verwenden:
SELECT owner,
(SELECT COUNT(*) FROM pet) as cnt
FROM pet