COUNT()
é uma função de agregação que geralmente é combinada com um GROUP BY
cláusula. curdate()
é uma função de data que gera a data atual. Apenas o MySQL (até onde eu sei) permite essa sintaxe sem usar o
GROUP BY
cláusula. Como você não o forneceu, COUNT(*)
contará a quantidade total de linhas na tabela e o owner
coluna será selecionada aleatoriamente/padrão do otimizador/por índices. Esta deve ser sua consulta:
select owner, count(*)
from pet
group by owner;
Que diz ao otimizador para contar o total de linhas, para cada proprietário.
Quando nenhuma cláusula group by for mencionada - as funções de agregação são aplicadas em todos os dados da tabela.
EDITAR: Uma contagem que será aplicada em cada linha não pode ser feita normalmente com
COUNT()
e geralmente usado com uma função analítica -> COUNT() OVER(PARTITION...)
que infelizmente não existe no MySQL. Sua outra opção é fazer uma JOIN/CORRELATED QUERY
para esta coluna adicional. Outra edição: Se você quiser a contagem total ao lado de cada proprietário, use uma subconsulta:
SELECT owner,
(SELECT COUNT(*) FROM pet) as cnt
FROM pet