sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué COUNT() muestra solo una fila de la tabla?

COUNT() es una función de agregación que generalmente se combina con un GROUP BY cláusula.

curdate() es una función de fecha que genera la fecha actual.

Solo MySQL (que yo sepa) permite esta sintaxis sin usar GROUP BY cláusula. Como no lo proporcionaste, COUNT(*) contará la cantidad total de filas en la tabla y el owner la columna se seleccionará aleatoriamente/por defecto del optimizador/por índices.

Esta debería ser su consulta:

select owner, count(*) 
from pet
group by owner;

Lo que le dice al optimizador que cuente el total de filas, para cada propietario.

Cuando no se menciona la cláusula group by, las funciones de agregación se aplican a todos los datos de la tabla.

EDITAR: Un conteo que se aplicará en cada fila normalmente no se puede hacer con COUNT() y generalmente se usa con una función analítica -> COUNT() OVER(PARTITION...) que desafortunadamente no existe en MySQL. Su otra opción es hacer una JOIN/CORRELATED QUERY para esta columna adicional.

Otra edición: Si desea contar el total junto a cada propietario, puede usar una subconsulta:

SELECT owner,
       (SELECT COUNT(*) FROM pet) as cnt
FROM pet