sql >> Database >  >> RDS >> Mysql

Waarom toont COUNT() slechts één rij met tabellen?

COUNT() is een aggregatiefunctie die meestal wordt gecombineerd met een GROUP BY clausule.

curdate() is een datumfunctie die de huidige datum uitvoert.

Alleen MySQL (voor zover ik weet) staat deze syntaxis toe zonder de GROUP BY te gebruiken clausule. Aangezien u deze niet heeft opgegeven, COUNT(*) telt het totale aantal rijen in de tabel en de owner kolom wordt willekeurig geselecteerd/optimizer standaard/door indexen.

Dit zou je vraag moeten zijn:

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

Wat de optimizer vertelt om het totale aantal rijen te tellen, voor elk eigenaar.

Als er geen group by-clausule wordt genoemd, worden de aggregatiefuncties toegepast op de volledige gegevens van de tabel.

BEWERKEN: Een telling die op elke rij wordt toegepast, kan normaal gesproken niet worden gedaan met COUNT() en meestal gebruikt met een analytische functie -> COUNT() OVER(PARTITION...) die helaas niet bestaat in MySQL. Je andere optie is om een ​​JOIN/CORRELATED QUERY . te maken voor deze extra kolom.

Nog een bewerking: Als je het totaal naast elke eigenaar wilt tellen, kun je een subquery gebruiken:

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


  1. Naamloze beperkingen laten vallen

  2. Mijn hashes zouten met PHP en MySQL

  3. MySQL-trigger:update bij het bereiken van een bepaalde datetime

  4. MySQL-tabelnaam als parameter