I SQL Server er COUNT_BIG()
funktion returnerer antallet af elementer fundet i en gruppe. Du kan bruge den til at finde ud af, hvor mange rækker der er i en tabel eller et resultatsæt.
Denne funktion fungerer på samme måde som COUNT()
fungere. Forskellen er, at COUNT()
returnerer sit resultat som en int , hvorimod COUNT_BIG()
returnerer sit resultat som en bigint .
Derfor COUNT_BIG()
kan være praktisk, hvis du forventer, at dit resultatsæt har et meget stort antal rækker (dvs. større end 2.147.483.647).
Syntaks
Syntaksen ser sådan ud:
-- Aggregation Function Syntax COUNT_BIG ( { [ [ ALL | DISTINCT ] expression ] | * } ) -- Analytic Function Syntax COUNT_BIG ( [ ALL ] { expression | * } ) OVER ( [] )
ALL
anvender den aggregerede funktion på alle værdier. Dette er standardværdien.
DISTINCT
angiver, at funktionen returnerer antallet af unikke ikke-nullværdier.
expression
er et udtryk af enhver art. Samlede funktioner og underforespørgsler understøttes ikke i udtrykket.
*
angiver, at alle rækker skal tælles og returneres, inklusive duplikerede rækker og rækker, der indeholder nulværdier. COUNT(*)
tager ingen parametre og understøtter ikke brugen af DISTINCT
. Det kræver heller ikke et udtryk parameter (fordi den ikke bruger information om nogen bestemt kolonne).
OVER ( [ <partition_by_clause> ]
dividerer resultatsættet produceret af FROM
klausul i partitioner, som funktionen anvendes på. Hvis det ikke er angivet, behandler funktionen alle rækker i forespørgselsresultatsættet som en enkelt gruppe.
Eksempel 1 – Grundlæggende brug
Her er et grundlæggende eksempel, der viser, hvordan denne funktion fungerer:
USE WideWorldImportersDW; SELECT COUNT_BIG(*) AS 'Row Count' FROM Fact.[Order];
Resultat:
+-------------+ | Row Count | |-------------| | 231412 | +-------------+
I dette tilfælde er der 231412 rækker i Fakta.[Order] tabel.
I dette tilfælde kunne jeg have brugt COUNT()
for at returnere det samme resultat, fordi rækkeantallet er lille nok til en int at håndtere.
Eksempel 2 – Et større resultatsæt
Den virkelige fordel ved at bruge COUNT_BIG()
er, når dit resultatsæt er meget større end det forrige eksempel.
Eksempel:
SELECT COUNT_BIG(*) AS 'Row Count' FROM ReallyBigTable;
Resultat:
+-----------------+ | Row Count | |-----------------| | 9147483648 | +-----------------+
I dette tilfælde er rækkeantallet så stort, at en int ikke ville kunne klare det. Heldigvis kan vi bruge COUNT_BIG()
, fordi den returnerer sit resultat som en bigint .
Flere eksempler
For flere eksempler, se Hvordan COUNT()
Fungerer i SQL Server. Artiklen giver flere eksempler, end der er angivet her, som alle også gælder for COUNT_BIG()
.
Et alternativ:APPROX_COUNT_DISTINCT()
Hvis du arbejder med meget store datasæt, kan du overveje at bruge APPROX_COUNT_DISTINCT()
i stedet for COUNT_BIG(DISTINCT )
i nogle tilfælde.
APPROX_COUNT_DISTINCT()
returnerer en omtrentlig værdi i stedet for en præcis værdi. Det er dog designet til at være meget mere responsivt end COUNT_BIG()
, så det kunne være nyttigt i perioder, hvor lydhørhed er vigtigere end præcision.
Det er designet til at returnere unikke, ikke-nul-værdier, så det ville kun være relevant på tidspunkter, hvor du normalt ville bruge DISTINCT
klausul med COUNT_BIG()
.
Bemærk også, at i skrivende stund APPROX_COUNT_DISTINCT()
er i offentlig forhåndsvisningsstatus.