Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que COUNT() mostra apenas uma linha da tabela?


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