Recuento de valores únicos
COUNT(DISTINCT ...) en la práctica
Recuento de valores únicos es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
¿Por qué contar valores únicos?
Cuando usa COUNT(*), cuenta todas las filas, incluidos los duplicados. Sin embargo, a veces solo quiere saber cuántos valores únicos existen en una columna.
Por ejemplo: ¿de cuántos países diferentes proceden sus clientes? ¿Cuántos productos únicos se pidieron el mes pasado? Aquí es donde resulta útil COUNT(DISTINCT ...).
Configuración de una tabla de ejemplo
Vamos a crear una tabla orders para practicar. Cada pedido tiene un nombre de cliente, un producto y un país.
Observe que algunos clientes y países aparecen más de una vez; es intencionado, para que podamos ver la diferencia entre contar todas las filas y contar los valores únicos.
CREATE TABLE orders (
id INT,
customer VARCHAR(50),
product VARCHAR(50),
country VARCHAR(50)
);
INSERT INTO orders VALUES
(1, 'Alice', 'Laptop', 'USA'),
(2, 'Bob', 'Phone', 'UK'),
(3, 'Alice', 'Tablet', 'USA'),
(4, 'Carol', 'Laptop', 'Canada'),
(5, 'Bob', 'Laptop', 'UK'),
(6, 'Dave', 'Phone', 'USA'),
(7, 'Carol', 'Phone', 'Canada'),
(8, 'Eve', 'Tablet', 'Germany');COUNT(*) frente a COUNT(DISTINCT)
Ejecute ambas consultas y compare los resultados. COUNT(*) devuelve 8, una por cada fila. COUNT(DISTINCT customer) devuelve 5, porque solo hay 5 clientes únicos (Alice, Bob, Carol, Dave, Eve).
Esta es la idea fundamental: COUNT(DISTINCT column) ignora los valores repetidos y cuenta únicamente los valores únicos.
SELECT COUNT(*) AS total_orders,
COUNT(DISTINCT customer) AS unique_customers
FROM orders;Contar países únicos
Veamos de cuántos países diferentes proceden nuestros clientes. Aunque la tabla orders tiene 8 filas, varias de ellas comparten el mismo país.
El resultado será 4: USA, UK, Canada y Germany, sin importar cuántas veces aparezca cada uno.
SELECT COUNT(DISTINCT country) AS unique_countries
FROM orders;Contar productos únicos
Podemos aplicar el mismo patrón a cualquier columna. Aquí contamos cuántos productos diferentes se han pedido.
Aunque «Laptop» aparece tres veces y «Phone» aparece tres veces, cada producto se cuenta una sola vez. La respuesta es 3: Laptop, Phone y Tablet.
SELECT COUNT(DISTINCT product) AS unique_products
FROM orders;COUNT(DISTINCT) con WHERE
Puede combinar COUNT(DISTINCT ...) con una cláusula WHERE para reducir las filas antes de contar. Aquí contamos los productos únicos pedidos solo por clientes de USA.
Solo se tienen en cuenta las filas donde country = 'USA' y, después, se cuentan los productos únicos entre esas filas.
SELECT COUNT(DISTINCT product) AS usa_unique_products
FROM orders
WHERE country = 'USA';COUNT(DISTINCT) con GROUP BY
Al combinar GROUP BY con COUNT(DISTINCT ...), obtiene recuentos de valores únicos por grupo. Esta consulta responde a la pregunta: para cada país, ¿cuántos clientes únicos realizaron pedidos?
Cada grupo se procesa de forma independiente, por lo que los duplicados dentro de un grupo se eliminan antes de contar.
SELECT country,
COUNT(DISTINCT customer) AS unique_customers
FROM orders
GROUP BY country
ORDER BY unique_customers DESC;Contar valores únicos en varias columnas
Puede usar varias expresiones COUNT(DISTINCT ...) en el mismo SELECT. Esto le ofrece una visión rápida de la cardinalidad —cuántos valores únicos contiene cada columna— en una sola consulta.
La cardinalidad es una métrica útil al explorar un conjunto de datos nuevo.
SELECT COUNT(DISTINCT customer) AS unique_customers,
COUNT(DISTINCT product) AS unique_products,
COUNT(DISTINCT country) AS unique_countries
FROM orders;Cómo se trata NULL
Al igual que COUNT(column) normal, COUNT(DISTINCT column) ignora los valores NULL. NULL no se cuenta como un valor único.
En este ejemplo, dos filas tienen un país NULL. El resultado sigue siendo 4 países distintos que no son NULL, no 5.
INSERT INTO orders VALUES
(9, 'Frank', 'Phone', NULL),
(10, 'Grace', 'Laptop', NULL);
SELECT COUNT(DISTINCT country) AS unique_countries_no_null
FROM orders;Comparación entre COUNT(*), COUNT(col) y COUNT(DISTINCT col)
Es útil ver las tres formas de COUNT una junto a otra:
- COUNT(*): cuenta todas las filas, incluidos los valores NULL
- COUNT(country): cuenta las filas donde country no es NULL
- COUNT(DISTINCT country): cuenta los valores de país únicos que no son NULL
Ejecute esto sobre la tabla actualizada (ahora tiene 10 filas, 2 de ellas con country NULL) para confirmar las diferencias.
SELECT COUNT(*) AS total_rows,
COUNT(country) AS non_null_countries,
COUNT(DISTINCT country) AS unique_countries
FROM orders;Caso de uso real: usuarios activos diarios
Uno de los usos más comunes de COUNT(DISTINCT ...) en analítica consiste en contar los usuarios activos diarios (DAU). Tiene un registro de eventos y quiere saber cuántos usuarios únicos estuvieron activos cada día.
Agrupe por fecha con GROUP BY y use COUNT(DISTINCT user_id) para obtener el recuento de usuarios únicos por día; los duplicados del mismo usuario que haga clic varias veces se excluyen automáticamente.
CREATE TABLE user_events (
event_date DATE,
user_id INT
);
INSERT INTO user_events VALUES
('2024-01-01', 1), ('2024-01-01', 2), ('2024-01-01', 1),
('2024-01-02', 2), ('2024-01-02', 3), ('2024-01-02', 2),
('2024-01-03', 1), ('2024-01-03', 4);
SELECT event_date,
COUNT(DISTINCT user_id) AS daily_active_users
FROM user_events
GROUP BY event_date
ORDER BY event_date;Comprobación rápida
Compruebe su comprensión de COUNT(DISTINCT ...) con esta pregunta.
Resumen de la lección
¡Excelente trabajo! Este es un resumen de lo que ha aprendido sobre COUNT(DISTINCT ...):
COUNT(DISTINCT column)cuenta únicamente los valores únicos que no son NULL de una columna.- Se diferencia de
COUNT(*)(todas las filas) y deCOUNT(column)(filas que no son NULL). - Funciona con WHERE para filtrar las filas antes de contar.
- Funciona con GROUP BY para contar valores únicos por grupo.
- Los valores NULL siempre se excluyen del recuento de valores únicos.
- Puede incluir varias expresiones
COUNT(DISTINCT ...)en el mismo SELECT. - Entre sus usos habituales en el mundo real se encuentran contar usuarios, productos, países y sesiones únicos.
Dominar esta función le proporciona una herramienta potente para explorar datos y realizar análisis.
Preguntas frecuentes
¿La lección «Recuento de valores únicos» es gratis?
Sí — el texto completo de «Recuento de valores únicos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Recuento de valores únicos»?
COUNT(DISTINCT ...) en la práctica Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Recuento de valores únicos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos de SELECT DISTINCT
- DISTINCT en varias columnas
- DISTINCT ON de PostgreSQL
- Recuento de valores únicos