COUNT()
is een aggregatiefunctie die meestal wordt gecombineerd met een GROUP BY
clausule.
curdate()
is een datumfunctie die de huidige datum uitvoert.
Alleen MySQL (voor zover ik weet) staat deze syntaxis toe zonder de GROUP BY
te gebruiken clausule. Aangezien u deze niet heeft opgegeven, COUNT(*)
telt het totale aantal rijen in de tabel en de owner
kolom wordt willekeurig geselecteerd/optimizer standaard/door indexen.
Dit zou je vraag moeten zijn:
select owner, count(*)
from pet
group by owner;
Wat de optimizer vertelt om het totale aantal rijen te tellen, voor elk eigenaar.
Als er geen group by-clausule wordt genoemd, worden de aggregatiefuncties toegepast op de volledige gegevens van de tabel.
BEWERKEN: Een telling die op elke rij wordt toegepast, kan normaal gesproken niet worden gedaan met COUNT()
en meestal gebruikt met een analytische functie -> COUNT() OVER(PARTITION...)
die helaas niet bestaat in MySQL. Je andere optie is om een JOIN/CORRELATED QUERY
. te maken voor deze extra kolom.
Nog een bewerking: Als je het totaal naast elke eigenaar wilt tellen, kun je een subquery gebruiken:
SELECT owner,
(SELECT COUNT(*) FROM pet) as cnt
FROM pet