SQL - Count y group by

   
Vista:

Count y group by

Publicado por Nico (2 intervenciones) el 07/01/2016 08:19:14
Buenos dias y gracias de antemano.
Quiero filtrar registros repetidos: mismo nombre, pero diferente apellido.
Lo hago asi:
Select name, count(*)
From tabla group by name
Having count (*) > 1

Pero no consigo hacer la consulta que me muestre los apellidos ademas del nombre.... alguna idea?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Count y group by

Publicado por xve (238 intervenciones) el 07/01/2016 11:04:57
Hola Nico, no se que base de datos estas utilizando, pero creo que así te funcionara...

1
2
3
Select name, count(*) as total
From tabla group by name
having total > 1

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Count y group by

Publicado por Isaias (691 intervenciones) el 07/01/2016 21:25:54
Dale la vuelta a la "tortilla", simplemente CONCATENA nombre y apellido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Count y group by

Publicado por leonardo_josue (880 intervenciones) el 07/01/2016 22:43:40
Hola Nico:

No estoy seguro de haber entendido bien qué es lo que necesitas, pero aquí hay algo que te puede servir:

Supongamos que tienes esta tabla;

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT * FROM tabla;
+------+--------+----------+
| id   | nombre | apellido |
+------+--------+----------+
|    1 | Leo    | Corcega  |
|    2 | Leo    | Uno      |
|    3 | Leo    | Dos      |
|    4 | Nico   | Algo     |
|    5 | Nico   | Otro     |
|    6 | Juan   | Perez    |
+------+--------+----------+
6 rows in set (0.00 sec)

Con esta tabla y la consulta que tienes, puedes obtener qué nombres están repetidos, pero que tengan un apellido distinto, es decir, haces algo como esto:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT nombre, COUNT(DISTINCT apellido)
    -> FROM tabla
    -> GROUP BY nombre
    -> HAVING COUNT(DISTINCT apellido) > 1;
+--------+--------------------------+
| nombre | COUNT(DISTINCT apellido) |
+--------+--------------------------+
| Leo    |                        3 |
| Nico   |                        2 |
+--------+--------------------------+
2 rows in set (0.00 sec)

Aquí se observa que LEO y NICO están repetidos, ahora, si te interesa saber también el apellido, puedes utilizar esto como una subconsulta para filtrar sólo estos nombres:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> SELECT tabla.nombre, tabla.apellido
    -> FROM tabla
    -> INNER JOIN
    -> ( SELECT nombre, COUNT(DISTINCT apellido)
    ->   FROM tabla
    ->   GROUP BY nombre
    ->   HAVING COUNT(DISTINCT apellido) > 1) T ON t.nombre = tabla.nombre;
+--------+----------+
| nombre | apellido |
+--------+----------+
| Leo    | Corcega  |
| Leo    | Uno      |
| Leo    | Dos      |
| Nico   | Algo     |
| Nico   | Otro     |
+--------+----------+
5 rows in set (0.00 sec)

es decir, lo único que haces es "desaparecer" o filtrar a JUAN, ya que este registro NO ESTÁ REPETIDO.

Si esto no te sirve, postea algunos datos de ejemplo y dinos qué es lo que estás esperando como salida.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Count y group by

Publicado por nicolas (2 intervenciones) el 08/01/2016 09:28:20
Este último es perfecto!!!

Muchas gracias!!!!

Es la primera vez que entro y consulto en este foro y la vedad es que es un día me habéis desatascado! gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar