W SQL Server COUNT_BIG() funkcja zwraca liczbę elementów znalezionych w grupie. Możesz go użyć, aby dowiedzieć się, ile wierszy znajduje się w tabeli lub zestawie wyników.
Ta funkcja działa podobnie do COUNT() funkcjonować. Różnica polega na tym, że COUNT() zwraca swój wynik jako int , natomiast COUNT_BIG() zwraca swój wynik jako bigin .
Dlatego COUNT_BIG() może się przydać, jeśli spodziewasz się, że Twój zestaw wyników będzie zawierał bardzo dużą liczbę wierszy (tj. większy niż 2147483647).
Składnia
Składnia wygląda tak:
-- Aggregation Function Syntax
COUNT_BIG ( { [ [ ALL | DISTINCT ] expression ] | * } )
-- Analytic Function Syntax
COUNT_BIG ( [ ALL ] { expression | * } ) OVER ( [ ] )
ALL stosuje funkcję agregującą do wszystkich wartości. To jest wartość domyślna.
DISTINCT określa, że funkcja zwraca liczbę unikalnych wartości innych niż null.
expression jest wyrażeniem dowolnego typu. Funkcje agregujące i podzapytania nie są obsługiwane w wyrażeniu.
* określa, że wszystkie wiersze powinny być zliczane i zwracane, w tym wiersze zduplikowane i wiersze zawierające wartości null. COUNT(*) nie przyjmuje parametrów i nie obsługuje użycia DISTINCT . Nie wymaga również wyrażenia parametr (ponieważ nie używa informacji o żadnej konkretnej kolumnie).
OVER ( [ <partition_by_clause> ] dzieli zestaw wyników utworzony przez FROM klauzuli na przegrody, do których funkcja jest stosowana. Jeśli nie zostanie określony, funkcja traktuje wszystkie wiersze zestawu wyników zapytania jako pojedynczą grupę.
Przykład 1 – Podstawowe użycie
Oto podstawowy przykład pokazujący, jak działa ta funkcja:
USE WideWorldImportersDW; SELECT COUNT_BIG(*) AS 'Row Count' FROM Fact.[Order];
Wynik:
+-------------+ | Row Count | |-------------| | 231412 | +-------------+
W tym przypadku w Fakcie.[Zamówienie] . znajduje się 231412 wierszy tabela.
W tym przypadku mogłem użyć COUNT() aby zwrócić ten sam wynik, ponieważ liczba wierszy jest wystarczająco mała dla int do obsługi.
Przykład 2 – Większy zestaw wyników
Prawdziwa korzyść z używania COUNT_BIG() ma miejsce, gdy zestaw wyników jest znacznie większy niż w poprzednim przykładzie.
Przykład:
SELECT COUNT_BIG(*) AS 'Row Count' FROM ReallyBigTable;
Wynik:
+-----------------+ | Row Count | |-----------------| | 9147483648 | +-----------------+
W tym przypadku liczba wierszy jest tak duża, że int nie byłby w stanie sobie z tym poradzić. Na szczęście możemy użyć COUNT_BIG() , ponieważ zwraca swój wynik jako bigin .
Więcej przykładów
Więcej przykładów znajdziesz w artykule Jak COUNT() Działa w SQL Server. Ten artykuł zawiera więcej przykładów niż wymienione tutaj, z których wszystkie mają również zastosowanie do COUNT_BIG() .
Alternatywa:APPROX_COUNT_DISTINCT()
Jeśli pracujesz z bardzo dużymi zestawami danych, możesz rozważyć użycie APPROX_COUNT_DISTINCT() zamiast COUNT_BIG(DISTINCT ) w niektórych przypadkach.
APPROX_COUNT_DISTINCT() zwraca wartość przybliżoną, a nie dokładną. Jest jednak zaprojektowany tak, aby był znacznie bardziej responsywny niż COUNT_BIG() , więc może być przydatne w czasach, w których szybkość reakcji jest ważniejsza niż precyzja.
Został zaprojektowany do zwracania unikalnych, niepustych wartości, więc będzie miał znaczenie tylko w sytuacjach, w których normalnie używałbyś DISTINCT klauzula z COUNT_BIG() .
Pamiętaj też, że w momencie pisania APPROX_COUNT_DISTINCT() jest w stanie publicznego podglądu.