Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como COUNT_BIG() funciona no SQL Server


No SQL Server, o COUNT_BIG() A função retorna o número de itens encontrados em um grupo. Você pode usá-lo para descobrir quantas linhas estão em uma tabela ou conjunto de resultados.

Esta função funciona de forma semelhante ao COUNT() função. A diferença é que COUNT() retorna seu resultado como um int , enquanto COUNT_BIG() retorna seu resultado como um bigint .

Portanto, COUNT_BIG() pode ser útil se você espera que seu conjunto de resultados tenha um número muito grande de linhas (ou seja, maior que 2.147.483.647).


Sintaxe


A sintaxe fica assim:
-- Aggregation Function Syntax  
COUNT_BIG ( { [ [ ALL | DISTINCT ] expression ] | * } )  
  
-- Analytic Function Syntax  
COUNT_BIG ( [ ALL ] { expression | * } ) OVER ( [  ] )

ALL aplica a função agregada a todos os valores. Este é o valor padrão.

DISTINCT especifica que a função retorna o número de valores não nulos exclusivos.

expression é uma expressão de qualquer tipo. Funções agregadas e subconsultas não são suportadas na expressão.

* especifica que todas as linhas devem ser contadas e retornadas, incluindo linhas duplicadas e linhas que contêm valores nulos. COUNT(*) não aceita parâmetros e não suporta o uso de DISTINCT . Também não requer uma expressão parâmetro (porque não usa informações sobre nenhuma coluna em particular).

OVER ( [ <partition_by_clause> ] divide o conjunto de resultados produzido pelo FROM cláusula em partições às quais a função é aplicada. Se não for especificado, a função trata todas as linhas do conjunto de resultados da consulta como um único grupo.

Exemplo 1 – Uso básico


Aqui está um exemplo básico mostrando como essa função funciona:
USE WideWorldImportersDW;
SELECT COUNT_BIG(*) AS 'Row Count' 
FROM Fact.[Order];

Resultado:
+-------------+
| Row Count   |
|-------------|
| 231412      |
+-------------+

Nesse caso, há 231.412 linhas no Fact.[Order] tabela.

Nesse caso, eu poderia ter usado COUNT() para retornar o mesmo resultado, porque a contagem de linhas é pequena o suficiente para um int lidar.

Exemplo 2 – Um conjunto de resultados maior


O benefício real de usar COUNT_BIG() é quando seu conjunto de resultados é muito maior que o exemplo anterior.

Exemplo:
SELECT COUNT_BIG(*) AS 'Row Count' 
FROM ReallyBigTable;

Resultado:
+-----------------+
| Row Count       |
|-----------------|
| 9147483648      |
+-----------------+

Nesse caso, a contagem de linhas é tão grande que um int não seria capaz de lidar com isso. Felizmente podemos usar COUNT_BIG() , porque retorna seu resultado como um bigint .

Mais exemplos


Para mais exemplos, veja Como COUNT() Funciona no SQL Server. Esse artigo fornece mais exemplos do que os listados aqui, todos os quais também são aplicáveis ​​a COUNT_BIG() .

Uma alternativa:APPROX_COUNT_DISTINCT()


Se você estiver trabalhando com conjuntos de dados muito grandes, considere usar APPROX_COUNT_DISTINCT() em vez de COUNT_BIG(DISTINCT ) em alguns casos.

APPROX_COUNT_DISTINCT() retorna um valor aproximado, em vez de um valor preciso. No entanto, ele foi projetado para ser muito mais responsivo do que COUNT_BIG() , portanto, pode ser útil para momentos em que a capacidade de resposta é mais importante que a precisão.

Ele foi projetado para retornar valores únicos e não nulos, portanto, seria relevante apenas para momentos em que você normalmente usaria o DISTINCT cláusula com COUNT_BIG() .

Observe também que, no momento de escrever APPROX_COUNT_DISTINCT() está no status de visualização pública.