sql >> Databasteknik >  >> RDS >> Mysql

Varför visar COUNT() bara en rad i tabellen?

COUNT() är en aggregeringsfunktion som vanligtvis kombineras med en GROUP BY klausul.

curdate() är en datumfunktion som matar ut det aktuella datumet.

Endast MySQL (så vitt jag vet) tillåter denna syntax utan att använda GROUP BY klausul. Eftersom du inte angav det, COUNT(*) kommer att räkna det totala antalet rader i tabellen och owner kolumnen kommer att väljas slumpmässigt/optimeringsstandard/av index .

Detta bör vara din fråga :

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

Vilket säger åt optimeraren att räkna totalt antal rader för varje ägare.

När ingen grupp för klausul nämns - aggregeringsfunktionerna tillämpas på hela tabellens data.

EDIT: En räkning som kommer att tillämpas på varje rad kan normalt inte göras med COUNT() och används vanligtvis med en analytisk funktion -> COUNT() OVER(PARTITION...) som tyvärr inte finns i MySQL. Ditt andra alternativ är att göra en JOIN/CORRELATED QUERY för denna extra kolumn.

En annan redigering: Om du vill räkna totalt bredvid varje ägare kan du använda en underfråga:

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


  1. mysql-frågan returnerar ibland ingenting

  2. Infoga värden från en tabell till en tabell

  3. Hur man extraherar veckonummer i sql

  4. MySQL Multi-Delete. Är det möjligt att radera refererade rader flera gånger?