sql >> Base de Datos >  >> RDS >> SQLite

Eliminar duplicados de los resultados de Count () en SQLite

Al usar count() función en SQLite, es posible que se encuentre en una situación en la que solo desee contar valores distintos. Es decir, no desea que los valores duplicados se cuenten varias veces.

En otras palabras, si la columna tiene el mismo valor varias veces, solo debe contar ese valor una vez.

Por defecto, count() incluirá todos los valores duplicados en su cálculo. Por ejemplo, si el valor “Gato” aparece 3 veces, count() contará eso como 3.

Sin embargo, si solo desea que se cuenten valores distintos, entonces count() lo contaría como 1.

Afortunadamente, hay una manera fácil de hacer esto. Todo lo que necesita hacer es agregar el DISTINCT palabra clave a su count() función. Así:

count(DISTINCT x)

Donde x es el nombre de la columna cuyo contenido está contando (o la fila completa si está usando el comodín asterisco).

Ejemplo

Tome la siguiente tabla:

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 las filas 2 a 4 tienen todas el mismo precio (10,0).

Si hago un count() normal en el Precio columna, contará las seis filas.

SELECT count(Price) FROM Products;

Resultado:

6

Sin embargo, si agrego DISTINCT palabra clave, contará esas tres filas como una sola.

SELECT count(DISTINCT Price) FROM Products;

Resultado:

4

Contar filas distintas

El count() La función acepta el comodín asterisco (* ), lo que significa que contará todas las filas.

Sin embargo, probablemente obtenga un error si intenta usar DISTINCT cuando se usa el comodín asterisco.

Aquí hay una tabla con filas duplicadas.

Postal      State             
----------  ------------------
NSW         New South Wales   
NSW         New South Wales   
QLD         Queensland        
TAS         Tasmania          
SA          South Australia   
WA          Western Australia 
VIC         Victoria          

En teoría, debería poder usar DISTINCT para contar las filas "desduplicadas" en esta tabla. Sin embargo, eso no parece posible.

SELECT count(DISTINCT *)
FROM States;

Resultado:

Error: near "*": syntax error

En cambio, necesito especificar un nombre de columna cuando uso DISTINCT palabra clave.

SELECT 
  count(State),
  count(DISTINCT State)
FROM States;

Resultado:

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

Otra forma de hacerlo sería hacer algo como esto:

SELECT count(*) FROM (SELECT DISTINCT * FROM States);

Resultado:

6

Sin embargo, esto no debería ser un problema, ya que generalmente no es un buen diseño de base de datos permitir filas duplicadas como esta.