Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi COUNT() n'affiche-t-il qu'une seule ligne de table ?

COUNT() est une fonction d'agrégation qui est généralement associée à un GROUP BY clause.

curdate() est une fonction de date qui affiche la date actuelle.

Seul MySQL (pour autant que je sache) autorise cette syntaxe sans utiliser le GROUP BY clause. Comme vous ne l'avez pas fourni, COUNT(*) comptera le nombre total de lignes dans la table et le owner la colonne sera sélectionnée de manière aléatoire/par défaut de l'optimiseur/par index .

Cela devrait être votre requête :

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

Ce qui indique à l'optimiseur de compter le nombre total de lignes, pour chacune propriétaire.

Lorsqu'aucune clause group by n'est mentionnée - les fonctions d'agrégation sont appliquées sur l'ensemble des données de la table.

MODIF : Un décompte qui sera appliqué sur chaque ligne ne peut normalement pas être fait avec COUNT() et généralement utilisé avec une fonction analytique -> COUNT() OVER(PARTITION...) qui malheureusement n'existe pas dans MySQL. Votre autre option est de faire une JOIN/CORRELATED QUERY pour cette colonne supplémentaire.

Une autre modification : Si vous souhaitez obtenir le nombre total à côté de chaque propriétaire, vous pouvez utiliser une sous-requête :

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