COUNT() je agregační funkce, která se obvykle kombinuje s GROUP BY doložka.
curdate() je funkce data, která zobrazuje aktuální datum.
Pouze MySQL (pokud vím) umožňuje tuto syntaxi bez použití GROUP BY doložka. Protože jste jej neposkytli, COUNT(*) bude počítat celkový počet řádků v tabulce a owner sloupec bude vybrán náhodně/výchozí nastavení optimalizátoru/podle indexů.
Toto by měl být váš dotaz:
select owner, count(*)
from pet
group by owner;
Což říká optimalizátoru, aby spočítal celkový počet řádků pro každý vlastník.
Pokud není zmíněna žádná skupina podle klauzule - agregační funkce se použijí na celá data tabulky.
UPRAVIT: Počet, který bude použit na každý řádek, nelze normálně provést pomocí COUNT() a obvykle se používá s analytickou funkcí -> COUNT() OVER(PARTITION...) který bohužel v MySQL neexistuje. Další možností je vytvořit JOIN/CORRELATED QUERY pro tento další sloupec.
Další úprava: Pokud chcete celkový počet u každého vlastníka, můžete použít dílčí dotaz:
SELECT owner,
(SELECT COUNT(*) FROM pet) as cnt
FROM pet