SQL - Problema con consulta de búsqueda de valores repetidos

 
Vista:

Problema con consulta de búsqueda de valores repetidos

Publicado por crtiesg (1 intervención) el 21/04/2018 13:37:00
Hola, tengo una duda que me está volviendo loco... Tengo una tabla con registros de tipo así:

ubicacion_id email
3 [email protected]
3 [email protected]
4 [email protected]
5 [email protected]
6 [email protected]
3 [email protected]
4 [email protected]

Quiero sacar los telefonos que estén en ubicaciones distintas, he probado con esta consulta:

select email, count(email)
from tabla
group by email
having count(email)> 1

El problema es que esto me busca las celdas repetidas aunque estén en la misma ubicación, y yo quiero sacar exclusivamente las que estén en ubicaciones distintas, es decir una consulta que me sacara en este ejemplo solo el email "[email protected]", que está en la ubicación 3, 5 y 6, y no el "[email protected]" que está dos veces en la ubicación 3.

No se si me he explicado bien, debería ser una tontería pero me estoy machacando y no doy con ello.

Muchas gracias!
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con consulta de búsqueda de valores repetidos

Publicado por leonardo_josue (1173 intervenciones) el 23/04/2018 15:49:12
Hola crtiesg:

Si lo que quieres es contar las ubicaciones, pues en el COUNT pones el campo de ubicaciones... si quieres saber las ubicaciones DISTINTAS, entonces le pones el operador DISTINCT al campo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mysql> SELECT * FROM tabla;
+--------------+---------------+
| ubicacion_id | email         |
+--------------+---------------+
|            3 | uno@uno.com   |
|            3 | dos@dos.com   |
|            4 | tres@tres.com |
|            5 | uno@uno.com   |
|            6 | uno@uno.com   |
|            3 | dos@dos.com   |
|            4 | tres@tres.com |
+--------------+---------------+
7 rows in set (0.00 sec)
 
mysql> SELECT
    ->   email,
    ->   COUNT(DISTINCT ubicacion_id) ubicaciones
    -> FROM tabla
    -> GROUP BY email;
+---------------+-------------+
| email         | ubicaciones |
+---------------+-------------+
| dos@dos.com   |           1 |
| tres@tres.com |           1 |
| uno@uno.com   |           3 |
+---------------+-------------+
3 rows in set (0.00 sec)

y si quieres filtrar sólo aquellos correos que tienen más de 1 ubicación distinta, entonces utilizas la cláusula HAVING:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT
    ->   email,
    ->   COUNT(DISTINCT ubicacion_id) ubicaciones
    -> FROM tabla
    -> GROUP BY email
    -> HAVING COUNT(DISTINCT ubicacion_id) > 1;
+-------------+-------------+
| email       | ubicaciones |
+-------------+-------------+
| uno@uno.com |           3 |
+-------------+-------------+
1 row in set (0.00 sec)

Haz la prueba y nos comentas.

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