Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/03/2013, 11:07
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 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.