Podczas pracy z bazami danych czasami chcesz dowiedzieć się, ile wierszy zostanie zwróconych przez zapytanie, bez faktycznego zwracania wyników zapytania. Czasami możesz po prostu chcieć dowiedzieć się, ile wierszy znajduje się w danej tabeli.
W SQL Server możesz użyć funkcji COUNT()
T-SQL funkcja zwracająca liczbę wierszy, które zostaną zwrócone w zapytaniu.
Dane
Oto dane, których użyjemy w przykładach na tej stronie:
SELECT *FROM Zadania;
Wynik:
IdZadania NazwaZadania OpisZadania KodZadania------ ------------ --------------- --------1 Kanał koty TBA brak 2 Pies wodny TBA brak 3 Pasza TBA brak 4 Dywan z farbą TBA brak 5 Czysty dach TBA brak 6 Nakarmienie kotów TBA brak
Przykład – policz wszystkie wiersze w tabeli
Oto przykład użycia COUNT()
funkcja zwracająca całkowitą liczbę wierszy w tabeli:
SELECT COUNT(*)FROM zadań;
Wynik:
6
Zwraca to liczbę wierszy w tabeli, ponieważ nie podaliśmy żadnych kryteriów do zawężenia wyników.
Przykład – dodawanie kryteriów
Oto przykład zliczania, ile wierszy zostanie zwróconych na podstawie podanych kryteriów:
SELECT COUNT(*)FROM ZadaniaWHERE Nazwa zadania LIKE '%dog%' OR Nazwa zadania LIKE '%cat%';
Wynik:
3
Przykład — określ pojedynczą kolumnę
Wszystkie poprzednie przykłady używają gwiazdki, aby zastosować liczbę do wszystkich kolumn. Masz również możliwość określenia konkretnej kolumny.
Przykład:
SELECT COUNT(Nazwa zadania)FROM zadań;
Wynik:
6
Chociaż ten przykład zwraca ten sam wynik, który otrzymaliśmy, gdy użyliśmy gwiazdki, niekoniecznie zawsze tak będzie. Na przykład, oto co się stanie, jeśli określimy inną kolumnę:
SELECT COUNT(TaskCode)FROM Zadania;
Wynik:
0
W tym przypadku otrzymujemy zero, ponieważ ta konkretna kolumna zawiera wartości null w każdym wierszu.
Przykład – wyraźny
Możesz dodać DISTINCT
argument zwracający tylko liczbę unikalnych (niepustych) wartości.
Być może zauważyłeś, że każdy wiersz w naszym TaskDescription
kolumna zawiera tę samą wartość („TBA”). Oraz TaskName
kolumna ma również zduplikowaną wartość („Nakarm koty” pojawia się dwukrotnie). Może to powodować problemy, jeśli nie chcesz, aby duplikaty były liczone.
Oto, jak to wygląda, gdy zastosujemy DISTINCT
argument do TaskName
kolumna:
SELECT COUNT(DISTINCT NazwaZadania)FROM Zadania;
Wynik:
5
I tutaj jest stosowany wobec TaskDescription
tabela (w której wszystkie wartości są identyczne):
SELECT COUNT(DISTINCT TaskDescription)FROM Zadania;
Wynik:
1
Przykład – Klauzula MIEĆ
Możesz także użyć COUNT()
z HAVING
klauzula ograniczająca zestaw wyników na podstawie liczby wierszy, które zostaną zwrócone.
Przykład:
USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM arINNER JOIN Albums al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1;; pre>Wynik:
ArtistName Liczba albumów------------------------- -----------Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Michael uczy się rocka 3 Tom Jones 3W tym przykładzie użyto innej bazy danych niż w poprzednich przykładach. Zwraca tylko tych artystów, którzy wydali więcej niż 1 album. Możemy zmienić tę liczbę niezależnie od liczby albumów:
USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artists arINNER JOIN Albums al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4;; pre>Wynik:
ArtistName Liczba albumów----------------------------- -----------Iron Maiden 5Funkcja COUNT_BIG()
T-SQL ma również funkcję
COUNT_BIG()
funkcja, która działa dokładnie jakCOUNT()
, z wyjątkiem tego, żeCOUNT()
zwraca int typ danych iCOUNT_BIG()
zwraca duży typ danych.Ta funkcja może być przydatna w przypadku widoków indeksowanych z pogrupowanymi zapytaniami. Możesz znaleźć, jeśli spróbujesz utworzyć indeks dla widoku zawierającego
COUNT(*)
, pojawia się następujący błąd:Nie można utworzyć indeksu w widoku „Music.dbo.AlbumsByArtist”, ponieważ używa zagregowanego COUNT. Zamiast tego użyj COUNT_BIG.W takich przypadkach zmiana widoku tak, aby używał
COUNT_BIG(*)
powinien rozwiązać problem.