sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor viser COUNT() kun en tabelrække?

COUNT() er en aggregeringsfunktion, som normalt kombineres med en GROUP BY klausul.

curdate() er en datofunktion, som udsender den aktuelle dato.

Kun MySQL (så vidt jeg ved) tillader denne syntaks uden at bruge GROUP BY klausul. Da du ikke har angivet det, COUNT(*) vil tælle det samlede antal rækker i tabellen og owner kolonne vil blive valgt tilfældigt/optimizer default/by indekser .

Dette burde være din forespørgsel :

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

Hvilket fortæller optimeringsværktøjet at tælle samlede rækker for hver ejer.

Når der ikke er nævnt nogen gruppe for klausul - anvendes aggregeringsfunktionerne på alle tabellens data.

EDIT: En optælling, der vil blive anvendt på hver række, kan normalt ikke udføres med COUNT() og bruges normalt med en analytisk funktion -> COUNT() OVER(PARTITION...) som desværre ikke findes i MySQL. Din anden mulighed er at lave en JOIN/CORRELATED QUERY for denne ekstra kolonne.

En anden redigering: Hvis du vil tælle i alt ud for hver ejer, kan du bruge en underforespørgsel:

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


  1. Hvordan kan jeg se forespørgselstider med høj præcision i mysql-kommandolinjen?

  2. Sådan forbinder du en Oracle-database fra PHP

  3. ClusterControl - Advanced Backup Management - PostgreSQL

  4. vise data fra SQL-database til php/html-tabel