SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Remover duplicatas dos resultados de Count() no SQLite


Ao usar o count() função no SQLite, você pode se encontrar na situação em que deseja apenas contar valores distintos. Ou seja, você não deseja que valores duplicados sejam contados várias vezes.

Em outras palavras, se a coluna tiver o mesmo valor várias vezes, ela deverá contar esse valor apenas uma vez.

Por padrão, count() incluirá todos os valores duplicados em seu cálculo. Por exemplo, se o valor “Cat” aparecer 3 vezes, count() vai contar como 3.

No entanto, se você deseja apenas que valores distintos sejam contados, count() contaria como 1.

Felizmente, existe uma maneira fácil de fazer isso. Tudo o que você precisa fazer é adicionar o DISTINCT palavra-chave para o seu count() função. Assim:
count(DISTINCT x)

Onde x é o nome da coluna para qual conteúdo você está contando (ou a linha inteira se você estiver usando o curinga asterisco).

Exemplo


Pegue a seguinte tabela:
ProductId   ProductName    Price     
----------  -------------  ----------
1           Widget Holder  139.5     
2           Blue Widget    10.0      
3           Red Widget     10.0      
4           Green Widget   10.0      
5           Widget Stick   89.75     
6           Foo Cap        11.99     

Observe que as linhas 2 a 4 têm o mesmo preço (10,0).

Se eu fizer um count() normal no Preço coluna, ele contará todas as seis linhas.
SELECT count(Price) FROM Products;

Resultado:
6

No entanto, se eu adicionar o DISTINCT palavra-chave, ele contará essas três linhas como uma.
SELECT count(DISTINCT Price) FROM Products;

Resultado:
4

Contar linhas distintas


O count() aceita o curinga asterisco (* ), o que significa que ele contará todas as linhas.

No entanto, você provavelmente receberá um erro se tentar usar DISTINCT ao usar o curinga asterisco.

Aqui está uma tabela com linhas duplicadas.
Postal      State             
----------  ------------------
NSW         New South Wales   
NSW         New South Wales   
QLD         Queensland        
TAS         Tasmania          
SA          South Australia   
WA          Western Australia 
VIC         Victoria          

Em teoria, eu deveria ser capaz de usar DISTINCT para contar as linhas “desduplicadas” nesta tabela. No entanto, isso não parece possível.
SELECT count(DISTINCT *)
FROM States;

Resultado:
Error: near "*": syntax error

Em vez disso, preciso especificar um nome de coluna ao usar o DISTINCT palavra-chave.
SELECT 
  count(State),
  count(DISTINCT State)
FROM States;

Resultado:
count(State)  count(DISTINCT State)
------------  ---------------------
7             6                    

Outra maneira de fazer isso seria fazer algo assim:
SELECT count(*) FROM (SELECT DISTINCT * FROM States);

Resultado:
6

No entanto, isso não deve ser um problema, pois geralmente não é um bom design de banco de dados permitir linhas duplicadas como essa.