:arrow_up: ir al inicio
En SQL la palabra clave DISTINCT nos permite filtrar los resultados repetidos de una consulta
Supongamos que tenemos la siguiente tabla llamada colores
| COLOR |
|---|
| Rojo |
| Azul |
| Verde |
| Amarillo |
| Rojo |
| Verde |
| Rojo |
| Verde |
| Rojo |
| Negro |
| Blanco |
| Rojo |
| Azul |
| Verde |
| Amarillo |
Nos piden crear una conculta que nos muestre cada color una unica vez, para esto utilizamos el siguiente comando:
SELECT DISTINCT color AS color_unico
FROM colores
Ejercicio Prueba en el editor la misma instrucción aprendida para ver cual sería el resultado de la consulta.
Ejercicio Dada la siguiente tabla de usuarios
| CORREO |
|---|
| juan.perez@empresa.com |
| maria.gonzalez@empresa.com |
| carlos.rodriguez@empresa.com |
| ana.martinez@empresa.com |
| luis.garcia@empresa.com |
| carmen.lopez@empresa.com |
| jose.hernandez@empresa.com |
| francisco.martin@empresa.com |
| laura.sanchez@empresa.com |
| antonio.temaz@empresa.com |
| juan.perez@empresa.com |
| maria.gonzalez@empresa.com |
Crea una consulta que nos muestre cada correo una única vez. La columa mostrada debe llamarse correo_unico
select distinct(correo) as correo_unico from usuarios
Se tiene la tabla ventas con la sigguiente informaicon:
| ID_VENTA | MONTO | FECHA_VENTA |
|---|---|---|
| 1 | 200 | 2010-01-15 |
| 2 | 150 | 2011-02-20 |
| 3 | 300 | 2012-04-10 |
| 4 | 250 | 2013-04-05 |
| 5 | 100 | 2014-04-25 |
| 6 | 350 | 2015-06-18 |
| 7 | 400 | 2015-06-22 |
| 8 | 180 | 2015-06-09 |
| 9 | 220 | 2018-07-30 |
| 10 | 275 | 2019-07-11 |
Se nos ha solicitado crear una consulta que muestre los años en los que se han realizado transacciones, excluyendo repeticiones. Como ya sabemos, en ejercicios anteriores, para obtener el año a partir de la feha de venta,podemos utilizar el siguiente codigo:
select strftime('%Y', fecha_venta) as año_venta from ventas
Sin embargo, para asegurarnos de obtener años unicos podemos agregar la clausula DISTINCT a nuestra consulta de la siguiente manera:
SELECT DISTINCT strftime('%Y', fecha_venta) as año_unico from ventas
Ejercicio: Utilizando la tabla ventas, previamente utilizada, selecciona todos los meses distintos, asignamdole a la columna el alias “mes_unico”.
select distinct strftime('%m', fecha_venta) as mes_unico
from ventas
Si queremos contar los valores distintos en una columna de una tabla, podemos combinar las funciones COUNT y DISTINCT de la siguiente manera COUNT(DISTINCT columna)
Veamos un ejemplo con la siguiente tabla empleados:
| NOMBRE | APELLIDO | SUELDO | DEPARTAMENTO |
|---|---|---|---|
| Juan | Pérez | 3000 | Ventas |
| María | González | 3500 | Marketing |
| Carlos | Rodríguez | 4000 | Tecnología |
| Ana | Martínez | 2800 | Recursos Humanos |
| Luis | García | 3200 | Finanzas |
| Carmen | López | 3100 | Administración |
| José | Hernández | 2900 | Operaciones |
| Francisco | Martín | 3400 | Legal |
| Laura | Sánchez | 3300 | Compras |
| Antonio | Díaz | 3600 | Producción |
| Sofía | Ruiz | 2750 | Ventas |
| Jorge | Vargas | 3900 | Tecnología |
| Elena | Castro | 3050 | Marketing |
| Pedro | Ortega | 3150 | Finanzas |
Podemos contar la cantidad de depetamentos unicos de la empresa con
SELECT COUNT(DISTINCT Departamento) FROM Empleados:
Ejercicio:
Se tiene la tabla usuarios con la siguiente informacion:
| ID | NOMBRE | APELLIDO | TELEFONO | |
|---|---|---|---|---|
| 1 | Juan | Pérez | juanperez@gmail.com | 555-1234 |
| 2 | María | García | mariagarcia@hotmail.com | 555-5678 |
| 3 | Pedro | López | pedrolopez@yahoo.com | 555-5678 |
| 4 | Lucía | Sánchez | luciasanchez@outlook.com | 555-5555 |
| 5 | Jorge | Martínez | jorgemartinez@gmail.com | 555-5678 |
Crea una consulta que muestre los teléfonos únicos de la tabla. La columna mostrada debe llamarse telefonos_unicos
select count(distinct telefono) as telefonos_unicos from usuarios
Ejercicio Dada la siguiente tabla de usuarios
| CORREO |
|---|
| juan.perez@empresa.com |
| maria.gonzalez@empresa.com |
| carlos.rodriguez@empresa.com |
| ana.martinez@empresa.com |
| luis.garcia@empresa.com |
| carmen.lopez@empresa.com |
| jose.hernandez@empresa.com |
| francisco.martin@empresa.com |
| laura.sanchez@empresa.com |
| antonio.temaz@empresa.com |
| juan.perez@empresa.com |
| maria.gonzalez@empresa.com |
Crea una consulta para contestar cuantos correos únicos existen en la tabla. La columna resultante debe llamarse correos_cant
select count(distinct correo) as correos_cant from usuarios
Podemos usar DISTINCT con más de una columna para obtener combinaciones únicas de esas columnas. Supongamos que tienes una tabla llamada empleados con las columnas departamento y puesto.
Para este ejemplo trabajaremos con la siguiente tabla empleados:
| ID_EMPLEADO | NOMBRE | DEPARTAMENTO | PUESTO |
|---|---|---|---|
| 1 | Juan | Ventas | Vendedor |
| 2 | María | Ventas | Vendedor |
| 3 | Carlos | IT | Desarrollador |
| 4 | Ana | IT | Desarrollador |
| 5 | Luis | Ventas | Gerente |
| 6 | Carmen | IT | Gerente |
| 7 | José | IT | Desarrollador |
| 8 | Francisco | Ventas | Vendedor |
uego podemos obtener todas las combinaciones únicas de Departamento y Puesto utilizando la siguiente consulta:
SELECT DISTINCT departamento, puesto FROM empleados;
Con esto obtendremos la siguiente tabla resultante.
| DEPARTAMENTO | PUESTO |
|---|---|
| Ventas | Vendedor |
| IT | Desarrollador |
| Ventas | Gerente |
| IT | Gerente |
Ejercicio Para la siguiente tabla “productos” deseamos obtener todas las combinaciones únicas de “Categoria” y “Precio”
| NOMBRE | CATEGORIA | PRECIO |
|---|---|---|
| Laptop | Electrónica | 1000 |
| Teléfono | Electrónica | 500 |
| Camiseta | Ropa | 20 |
| Pantalón | Ropa | 40 |
| Auriculares | Electrónica | 50 |
| Libro | Libros | 15 |
| Mochila | Accesorios | 30 |
SELECT DISTINCT categoria, precio
FROM productos