Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Contar casos repetidos

Estas en el tema de Contar casos repetidos en el foro de Mysql en Foros del Web. Buenas! Tengo una tabla de usuarios que me está dando algún problema... os comento: Tiene tres campos: - Nombre - Apellido - idGetName El "idGetName" ...
  #1 (permalink)  
Antiguo 14/03/2013, 02:03
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Contar casos repetidos

Buenas!

Tengo una tabla de usuarios que me está dando algún problema... os comento:

Tiene tres campos:

- Nombre
- Apellido
- idGetName

El "idGetName" es una FK a la tabla GetName, que contiene:

- id
- GetName

Y no es más que un nick "autogenerado" siguiendo este patrón:

Código:
- Quitas caracteres "raros" (acentos, comas, etc) de "Nombre" y "Apellido"
- Creas la cadena "Nombre"-"Apellido"
- Si existe en la tabla GetName, se le añade "-n", donde "n" será un entero que va incrementando hasta que el "GetName" generado no esté en la tabla
El caso es que, por algún motivo, creo que cometí algún error y por ende hay algún "GetName" repetido.

La tabla no es pequeña que digamos... así que no puedo andar revisando registro por registro... así que he pensado en generar un SQL que me diga los registros que hay repetidos.

Yo había pensado ejecutar algo como:

Código SQL:
Ver original
  1. SELECT `GetName`, COUNT(`GetName`) FROM GetName GROUP BY `GetName` ORDER BY COUNT(`GetName`) DESC;

Pero no se si es correcta la sentencia...

Me gustaría saber si es correcta antes de ejecutarla para no dejar el servidor corriendo una sentencia que gaste recursos y que luego no sirva para nada (son cerca de 30M de registros)...

Saludos y Gracias
  #2 (permalink)  
Antiguo 14/03/2013, 11:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Contar casos repetidos

Hola DoHITB:

La consulta en realidad es correcta, aunque en lugar de colocar

Código:
ORDER BY COUNT(`GetName`)
Podrías utilizar un alias o el número del campo... hasta donde recuerdo, cuando lo haces así te calcula nuevamente el campo... No sé cómo trabaja MySQL, pero en SQL Server sí teníamos resultados distintos al hacer esto. Sería así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +-------+
  3. | campo |
  4. +-------+
  5. | uno   |
  6. | dos   |
  7. | uno   |
  8. | tres  |
  9. | dos   |
  10. | uno   |
  11. +-------+
  12. 6 rows in set (0.00 sec)

Esta es la manera en que lo haces:

Código MySQL:
Ver original
  1. mysql> SELECT campo, COUNT(campo)
  2.     -> FROM tabla
  3.     -> GROUP BY campo
  4.     -> ORDER BY COUNT(campo) DESC;
  5. +-------+--------------+
  6. | campo | COUNT(campo) |
  7. +-------+--------------+
  8. | uno   |            3 |
  9. | dos   |            2 |
  10. | tres  |            1 |
  11. +-------+--------------+
  12. 3 rows in set (0.00 sec)

Pero podrías hacerlo como te menciono, por posición o con un alias:

Código MySQL:
Ver original
  1. mysql> SELECT campo, COUNT(campo)
  2.     -> FROM tabla
  3.     -> GROUP BY campo
  4.     -> ORDER BY 2 desc;
  5. +-------+--------------+
  6. | campo | COUNT(campo) |
  7. +-------+--------------+
  8. | uno   |            3 |
  9. | dos   |            2 |
  10. | tres  |            1 |
  11. +-------+--------------+
  12. 3 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT campo, COUNT(campo) total
  15.     -> FROM tabla
  16.     -> GROUP BY campo
  17.     -> ORDER BY total DESC;
  18. +-------+-------+
  19. | campo | total |
  20. +-------+-------+
  21. | uno   |     3 |
  22. | dos   |     2 |
  23. | tres  |     1 |
  24. +-------+-------+
  25. 3 rows in set (0.00 sec)

Si en realidad de interesan sólo los duplicados (que supongo serían muy pocos casos) te recomiendo que agregues la cláusula HAVING.

Código MySQL:
Ver original
  1. mysql> SELECT campo, COUNT(campo) total
  2.     -> FROM tabla
  3.     -> GROUP BY campo
  4.     -> HAVING total > 1
  5.     -> ORDER BY total;
  6. +-------+-------+
  7. | campo | total |
  8. +-------+-------+
  9. | dos   |     2 |
  10. | uno   |     3 |
  11. +-------+-------+
  12. 2 rows in set (0.00 sec)

Y para el rendimiento, pues revisa que tengas declarado el campo GetName como un índice.

Saludos
Leo.
  #3 (permalink)  
Antiguo 15/03/2013, 03:49
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Contar casos repetidos

Si señor.

Toda una lección de SQL...

Sospechaba que tenía bien la sentencia, pero gracias a tus consejos creo que podré optimizar aún más la sentencia (había olvidado por completo el HAVING)...

¡Muchas gracias!

Etiquetas: campos, casos, registros, repetidos, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:04.