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