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

MySQL COUNT() – Få antallet af rækker, der skal returneres af en forespørgsel

MySQL inkluderer en COUNT() funktion, som giver dig mulighed for at finde ud af, hvor mange rækker der ville blive returneret fra en forespørgsel. Denne funktion er en del af SQL-standarden, og den kan bruges med de fleste relationelle databasestyringssystemer.

COUNT() Funktionen kan også bruges til at påvirke resultaterne af en forespørgsel, hvis det kræves, for eksempel ved kun at returnere de resultater, der har et rækkeantal større end et givet beløb.

Denne artikel indeholder eksempler på COUNT() brug i MySQL.

Dataene

For det første, her er de data, vi vil bruge til eksemplerne på denne side:

VÆLG *FRA Opgaver;

Resultat:

+--------+--------------------+---------------- +| TaskId | Opgavenavn | Opgavebeskrivelse |+--------+--------------------+----------------+ | 1 | Lav have | NULL || 2 | Fodre katte | NULL || 3 | Maling af tag | NULL || 4 | Tag hunden på tur | NULL || 5 | Slap af | NULL || 6 | Fodre katte | NULL |+--------+--------------------+-----------------+ 

Tæl alle rækker i en tabel

Du kan bruge COUNT() for at returnere det samlede antal rækker i en tabel:

VÆLG ANTAL(*)FRA opgaver;

Resultat:

+----------+| COUNT(*) |+----------+| 6 |+----------+ 

Dette returnerer antallet af rækker i tabellen, fordi vi ikke har angivet nogen kriterier til at indsnævre resultaterne.

Begræns resultaterne

Når vi tilføjer en WHERE klausul, der indsnævrer resultatsættet, får vi et mindre tal:

VÆLG ANTAL(*)FRA Opgaver WHERE Opgavenavn SOM '%cat%';

Resultat:

+----------+| COUNT(*) |+----------+| 2 |+----------+

Enkelt kolonne vs stjerne (*)

De foregående eksempler bruger alle en stjerne til at anvende tællingen på alle kolonner. Som med enhver forespørgsel er stjernen valgfri, og den bruges som et jokertegn til at returnere alle kolonner. Så når du bruger COUNT() funktion, har du også mulighed for at angive specifikke kolonner (i modsætning til alle kolonner) som argument.

Eksempel:

VÆLG ANTAL(TaskName)FRA Opgaver;

Resultat:

+----------------+| COUNT(Opgavenavn) |+-----------------+| 6 |+-----------------+

Selvom dette eksempel returnerer det samme resultat, som vi fik, da vi brugte stjernen, vil det ikke nødvendigvis altid være tilfældet. For eksempel, her er hvad der sker, hvis vi angiver en anden kolonne:

VÆLG ANTAL(TaskDescription)FRA Opgaver;

Resultat:

+------------------------+| COUNT(Opgavebeskrivelse) |+------------------------+| 0 |+------------------------+

I dette tilfælde får vi nul, fordi den pågældende kolonne indeholder nulværdier i hver række.

Eksempel – Distinkt

Du kan tilføje DISTINCT argument for kun at returnere antallet af rækker med forskellig ikke-NULL værdier.

Du har måske bemærket, at TaskName kolonne har en dubletværdi ("Foderkatte" vises to gange). Dette kan give problemer, hvis du ikke ønsker, at dubletter skal tælles med.

Sådan ser det ud, hvis vi anvender DISTINCT argument til TaskName kolonne:

VÆLG ANTAL(DISTINCT TaskName)FROM Tasks;

Resultat:

+--------------------------------+| COUNT(DISTINCT TaskName) |+--------------------------------+| 5 |+---------------------------+

Så selvom tabellen indeholder seks rækker, er to af dem dubletter. Derfor tælles de to som én, vi får et resultat på fem.

Eksempel – HAVING-klausulen

Du kan også bruge COUNT() med HAVING klausul for at begrænse et resultatsæt baseret på antallet af rækker, der ville blive returneret.

Her er et eksempel med et andet datasæt end de foregående eksempler:

BRUG musik;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artists arINNER JOIN Albums al PÅ ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1; 

Resultat:

+------------------------+-------------+| Kunstnernavn | Albumantal |+------------------------+-------------+| Iron Maiden | 5 || Devin Townsend | 3 || Michael lærer at rocke | 3 || Tom Jones | 3 || Allan Holdsworth | 2 |+------------------------+-------------+

Denne forespørgsel returnerer kun de kunstnere, der har udgivet mere end 1 album. Her er, hvad der sker, når vi øger værdien i HAVING klausul:

BRUG musik;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artists arINNER JOIN Albums al PÅ ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4; 

Resultat:

+-------------+-------------+| Kunstnernavn | Albumantal |+-------------+-------------+| Iron Maiden | 5 |+-------------+-------------+

  1. Hvordan ændrer jeg en MySQL-kolonne for at tillade NULL?

  2. Indsæt primær nøgle til automatisk stigning i eksisterende tabel

  3. Sådan genereres et entity-relationship (ER) diagram ved hjælp af Oracle SQL Developer

  4. Numeriske funktioner i Oracle (fuld liste)