Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum zeigt COUNT() nur eine Tabellenzeile an?

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