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

Perché COUNT() mostra solo una riga della tabella?

COUNT() è una funzione di aggregazione che di solito è combinata con un GROUP BY clausola.

curdate() è una funzione di data che restituisce la data corrente.

Solo MySQL (per quanto ne so) consente questa sintassi senza utilizzare GROUP BY clausola. Poiché non l'hai fornito, COUNT(*) conterà la quantità totale di righe nella tabella e il owner la colonna verrà selezionata in modo casuale/impostazione predefinita dell'ottimizzatore/in base agli indici.

Questa dovrebbe essere la tua domanda :

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

Ciò indica all'ottimizzatore di contare le righe totali, per ciascuna proprietario.

Quando nessuna clausola group by menzionata, le funzioni di aggregazione vengono applicate a tutti i dati della tabella.

MODIFICA: Normalmente non è possibile eseguire un conteggio che verrà applicato a ciascuna riga con COUNT() e di solito usato con una funzione analitica -> COUNT() OVER(PARTITION...) che purtroppo non esiste in MySQL. L'altra opzione è quella di creare una JOIN/CORRELATED QUERY per questa colonna aggiuntiva.

Un'altra modifica: Se vuoi totalizzare il conteggio accanto a ciascun proprietario, puoi utilizzare una query secondaria:

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