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.