COUNT()
er en aggregeringsfunktion, som normalt kombineres med en GROUP BY
klausul.
curdate()
er en datofunktion, som udsender den aktuelle dato.
Kun MySQL (så vidt jeg ved) tillader denne syntaks uden at bruge GROUP BY
klausul. Da du ikke har angivet det, COUNT(*)
vil tælle det samlede antal rækker i tabellen og owner
kolonne vil blive valgt tilfældigt/optimizer default/by indekser .
Dette burde være din forespørgsel :
select owner, count(*)
from pet
group by owner;
Hvilket fortæller optimeringsværktøjet at tælle samlede rækker for hver ejer.
Når der ikke er nævnt nogen gruppe for klausul - anvendes aggregeringsfunktionerne på alle tabellens data.
EDIT: En optælling, der vil blive anvendt på hver række, kan normalt ikke udføres med COUNT()
og bruges normalt med en analytisk funktion -> COUNT() OVER(PARTITION...)
som desværre ikke findes i MySQL. Din anden mulighed er at lave en JOIN/CORRELATED QUERY
for denne ekstra kolonne.
En anden redigering: Hvis du vil tælle i alt ud for hver ejer, kan du bruge en underforespørgsel:
SELECT owner,
(SELECT COUNT(*) FROM pet) as cnt
FROM pet