COUNT()
är en aggregeringsfunktion som vanligtvis kombineras med en GROUP BY
klausul.
curdate()
är en datumfunktion som matar ut det aktuella datumet.
Endast MySQL (så vitt jag vet) tillåter denna syntax utan att använda GROUP BY
klausul. Eftersom du inte angav det, COUNT(*)
kommer att räkna det totala antalet rader i tabellen och owner
kolumnen kommer att väljas slumpmässigt/optimeringsstandard/av index .
Detta bör vara din fråga :
select owner, count(*)
from pet
group by owner;
Vilket säger åt optimeraren att räkna totalt antal rader för varje ägare.
När ingen grupp för klausul nämns - aggregeringsfunktionerna tillämpas på hela tabellens data.
EDIT: En räkning som kommer att tillämpas på varje rad kan normalt inte göras med COUNT()
och används vanligtvis med en analytisk funktion -> COUNT() OVER(PARTITION...)
som tyvärr inte finns i MySQL. Ditt andra alternativ är att göra en JOIN/CORRELATED QUERY
för denna extra kolumn.
En annan redigering: Om du vill räkna totalt bredvid varje ägare kan du använda en underfråga:
SELECT owner,
(SELECT COUNT(*) FROM pet) as cnt
FROM pet