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.