В SQL Server, COUNT_BIG()
функцията връща броя на елементите, намерени в група. Можете да го използвате, за да разберете колко реда има в таблица или набор от резултати.
Тази функция работи подобно на COUNT()
функция. Разликата е, че COUNT()
връща резултата си като int , докато COUNT_BIG()
връща резултата си като голям .
Следователно COUNT_BIG()
може да е полезно, ако очаквате вашият набор от резултати да има много голям брой редове (т.е. по-голям от 2 147 483 647).
Синтаксис
Синтаксисът е така:
-- Aggregation Function Syntax COUNT_BIG ( { [ [ ALL | DISTINCT ] expression ] | * } ) -- Analytic Function Syntax COUNT_BIG ( [ ALL ] { expression | * } ) OVER ( [] )
ALL
прилага агрегатната функция към всички стойности. Това е стойността по подразбиране.
DISTINCT
указва, че функцията връща броя на уникалните ненулеви стойности.
expression
е израз от всякакъв тип. Обобщени функции и подзаявки не се поддържат в израза.
*
указва, че всички редове трябва да бъдат преброени и върнати, включително дублиращи се редове и редове, които съдържат нулеви стойности. COUNT(*)
не приема параметри и не поддържа използването на DISTINCT
. Освен това не изисква израз параметър (тъй като не използва информация за конкретна колона).
OVER ( [ <partition_by_clause> ]
разделя резултатния набор, произведен от FROM
клауза в дялове, към които се прилага функцията. Ако не е посочено, функцията третира всички редове от резултата от заявката като една група.
Пример 1 – Основна употреба
Ето основен пример, показващ как работи тази функция:
USE WideWorldImportersDW; SELECT COUNT_BIG(*) AS 'Row Count' FROM Fact.[Order];
Резултат:
+-------------+ | Row Count | |-------------| | 231412 | +-------------+
В този случай има 231412 реда в Факт.[Поръчка] таблица.
В този случай бих могъл да използвам COUNT()
за да върне същия резултат, защото броят на редовете е достатъчно малък за int да се справя.
Пример 2 – По-голям набор от резултати
Истинската полза от използването на COUNT_BIG()
е, когато вашият набор от резултати е много по-голям от предишния пример.
Пример:
SELECT COUNT_BIG(*) AS 'Row Count' FROM ReallyBigTable;
Резултат:
+-----------------+ | Row Count | |-----------------| | 9147483648 | +-----------------+
В този случай броят на редовете е толкова голям, че еint не би могъл да се справи. За щастие можем да използваме COUNT_BIG()
, защото връща резултата си като голям .
Още примери
За повече примери вижте Как COUNT()
Работи в SQL Server. Тази статия предоставя повече примери, отколкото е изброено тук, всички от които са приложими и за COUNT_BIG()
.
Алтернатива:APPROX_COUNT_DISTINCT()
Ако работите с много големи набори от данни, може да помислите да използвате APPROX_COUNT_DISTINCT()
вместо COUNT_BIG(DISTINCT )
в някои случаи.
APPROX_COUNT_DISTINCT()
връща приблизителна стойност, а не точна стойност. Той обаче е проектиран да бъде много по-отзивчив от COUNT_BIG()
, така че може да бъде полезно за моменти, когато отзивчивостта е по-важна от прецизността.
Той е проектиран да връща уникални, различни от нулеви стойности, така че би било подходящо само за моменти, когато обикновено използвате DISTINCT
клауза с COUNT_BIG()
.
Също така имайте предвид, че към момента на писане на APPROX_COUNT_DISTINCT()
е в състояние на публичен преглед.