sql >> Databasteknik >  >> RDS >> Mysql

MySQL COUNT() – Få antalet rader som ska returneras av en fråga

MySQL innehåller en COUNT() funktion, som låter dig ta reda på hur många rader som skulle returneras från en fråga. Denna funktion är en del av SQL-standarden och den kan användas med de flesta relationsdatabashanteringssystem.

COUNT() Funktionen kan också användas för att påverka resultaten av en fråga om det behövs, till exempel genom att endast returnera de resultat som har ett radantal som är större än ett givet belopp.

Den här artikeln innehåller exempel på COUNT() användning i MySQL.

Datan

Först, här är data vi kommer att använda för exemplen på den här sidan:

VÄLJ *FRÅN Uppgifter;

Resultat:

+--------+--------------------+---------------- +| TaskId | Uppgiftsnamn | Uppgiftsbeskrivning |+--------+--------------------+----------------+ | 1 | Gör trädgård | NULL || 2 | Mata katter | NULL || 3 | Måla tak | NULL || 4 | Ta hunden på promenad | NULL || 5 | Slappna av | NULL || 6 | Mata katter | NULL |+--------+--------------------+-----------------+ 

Räkna alla rader i en tabell

Du kan använda COUNT() för att returnera det totala antalet rader i en tabell:

VÄLJ ANTAL(*)FRÅN uppgifter;

Resultat:

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

Detta returnerar antalet rader i tabellen eftersom vi inte angav några kriterier för att begränsa resultaten.

Begränsa resultaten

När vi lägger till en WHERE sats som begränsar resultatuppsättningen får vi ett mindre antal:

VÄLJ ANTAL(*)FRÅN TasksWHERE TaskName LIKE '%cat%';

Resultat:

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

Enkel kolumn vs Asterisk (*)

De föregående exemplen använder alla en asterisk för att tillämpa räkningen på alla kolumner. Som med alla frågor är asterisken valfri och den används som ett jokertecken för att returnera alla kolumner. Så när du använder COUNT() funktion, har du också möjlighet att ange specifika kolumner (i motsats till alla kolumner) som argument.

Exempel:

VÄLJ ANTAL(TaskName)FROM Tasks;

Resultat:

+----------------+| COUNT(TaskName) |+-----------------+| 6 |+-----------------+

Även om det här exemplet returnerar samma resultat som vi fick när vi använde asterisken, kommer det inte nödvändigtvis alltid att vara fallet. Här är till exempel vad som händer om vi anger en annan kolumn:

VÄLJ ANTAL(TaskDescription)FRÅN Uppgifter;

Resultat:

+------------------------+| COUNT(TaskDescription) |+------------------------+| 0 |+------------------------+

I det här fallet får vi noll, eftersom just den kolumnen innehåller nollvärden i varje rad.

Exempel – Distinkt

Du kan lägga till DISTINCT argument för att endast returnera antalet rader med olika icke-NULL värden.

Du kanske har märkt att TaskName kolumnen har ett dubblettvärde (”Feed cats” visas två gånger). Detta kan orsaka problem om du inte vill att dubbletter ska räknas.

Så här ser det ut om vi använder DISTINCT argument till TaskName kolumn:

VÄLJ ANTAL(DISTINCT TaskName)FROM Tasks;

Resultat:

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

Så även om tabellen innehåller sex rader, är två av dem dubbletter. Därför räknas dessa två som en vi får ett resultat av fem.

Exempel – HAVING-klausulen

Du kan också använda COUNT() med HAVING sats för att begränsa en resultatuppsättning baserat på antalet rader som skulle returneras.

Här är ett exempel med en annan datauppsättning än de tidigare exemplen:

ANVÄND musik;VÄLJ ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FRÅN artister arINNER JOIN Albums al PÅ ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1; 

Resultat:

+------------------------+-------------+| Artistnamn | Albumantal |+------------------------+--------------+| Iron Maiden | 5 || Devin Townsend | 3 || Michael lär sig rocka | 3 || Tom Jones | 3 || Allan Holdsworth | 2 |+------------------------+-------------+

Denna fråga returnerar endast de artister som har släppt mer än 1 album. Här är vad som händer när vi ökar värdet i HAVING klausul:

ANVÄND musik;VÄLJ 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:

+-------------+-------------+| Artistnamn | Albumantal |+-------------+-------------+| Iron Maiden | 5 |+-------------+-------------+

  1. Hur man skapar databastabeller med SQL

  2. SQL-nycklar, MUL vs PRI vs UNI

  3. Hur kan jag använda en PostgreSQL-utlösare för att lagra ändringar (SQL-satser och radändringar)

  4. Vad är SQL Server? (Definition, versioner, upplagor)