COUNT() е функция за агрегиране, която обикновено се комбинира с GROUP BY клауза.
curdate() е функция за дата, която извежда текущата дата.
Само MySQL (доколкото знам) позволява този синтаксис без да се използва GROUP BY клауза. Тъй като не сте го предоставили, COUNT(*) ще отчита общото количество редове в таблицата и owner колоната ще бъде избрана произволно/по подразбиране на оптимизатора/по индекси.
Това трябва да е вашата заявка :
select owner, count(*)
from pet
group by owner;
Което казва на оптимизатора да брои общия брой редове завсеки собственик.
Когато не се споменава група по клауза - функциите за агрегиране се прилагат към всички данни на таблицата.
РЕДАКТИРАНЕ: Брой, който ще бъде приложен към всеки ред, не може да се направи нормално с COUNT() и обикновено се използва с аналитична функция -> COUNT() OVER(PARTITION...) който за съжаление не съществува в MySQL. Другата ви опция е да направите JOIN/CORRELATED QUERY за тази допълнителна колона.
Друга редакция: Ако искате да изчислите общия брой до всеки собственик, можете да използвате подзаявка:
SELECT owner,
(SELECT COUNT(*) FROM pet) as cnt
FROM pet