37 - Registros duplicados (distinct)


Problema:

Trabajamos con la tabla "libros" de una librería.

Eliminamos la tabla, si existe.

Creamos la tabla:

 create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(40) not null,
  autor varchar(30),
  editorial varchar(15),
  precio decimal(5,2) unsigned,
  primary key (codigo)
 );

Ingresamos algunos registros:

 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15);
 insert into libros (titulo,autor,editorial,precio)
  values('Martin Fierro','Jose Hernandez','Emece',22.20);
 insert into libros (titulo,autor,editorial,precio)
  values('Martin Fierro','Jose Hernandez','Planeta',42.20);
 insert into libros (titulo,autor,editorial,precio)
  values('Antologia poetica','Borges','Planeta',40);
 insert into libros (titulo,autor,editorial,precio)
  values('Aprenda PHP','Mario Molina','Emece',18.20);
 insert into libros (titulo,autor,editorial,precio)
  values('Cervantes y el quijote','Bioy Casares- Borges','Paidos',36.40);
 insert into libros (titulo,autor,editorial,precio)
  values('Manual de PHP', null, 'Paidos',30.80);
 insert into libros (titulo,autor,editorial,precio)
  values('Harry Potter y la piedra filosofal','J.K. Rowling','Planeta',45.00);
 insert into libros (titulo,autor,editorial,precio)
  values('Harry Potter y la camara secreta','J.K. Rowling','Planeta',46.00);
 insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null);
 insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',12.10);

Para obtener la lista de autores sin repetición usamos "distinct":

 select distinct autor
  from libros;

Si sólo queremos la lista de autores conocidos, es decir, no queremos incluir "null" en la lista, utilizamos la sentencia siguiente:

 select distinct autor
  from libros
  where autor is not null;

Para contar los distintos autores, sin considerar el valor "null" usamos:

 select count(distinct autor)
  from libros;

Note que si contamos los autores sin "distinct", no incluirá los valores "null" pero si los repetidos:

 select count(autor)
  from libros;

Esta sentencia cuenta los registros que tienen autor.

Para obtener los nombres de las editoriales usamos:

 select editorial
  from libros;

Para una consulta en la cual los nombres no se repitan tipeamos:

 select distinct editorial
  from libros;

Podemos saber la cantidad de editoriales distintas usamos:

 select count(distinct editorial)
 from libros;

Queremos conocer los distintos autores de la editorial "Planeta":

 select distinct autor from libros
  where editorial='Planeta';

Para contar la cantidad de autores distintos de cada editorial podemos usar "distinct" y "group by":

 select editorial,count(distinct autor)
  from libros
  group by editorial;

Para mostrar los títulos y editoriales de los libros sin repetir títulos ni editoriales, usamos:

 select distinct titulo,editorial
  from libros
  order by titulo;

La consulta nos devuelve registros con títulos iguales pero con editorial diferente, cada registro es distinto.




Retornar