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

Contar registros y comparar

Estas en el tema de Contar registros y comparar en el foro de Mysql en Foros del Web. Hola a todos. Tengo una tabla llamada ingreso con los siguientes campos: id_ingreso, rut, id_laboratorio, fecha_hora y otros campos que no son importantes para el ...
  #1 (permalink)  
Antiguo 04/01/2012, 21:21
 
Fecha de Ingreso: septiembre-2008
Mensajes: 11
Antigüedad: 15 años, 6 meses
Puntos: 0
Contar registros y comparar

Hola a todos.
Tengo una tabla llamada ingreso con los siguientes campos:
id_ingreso, rut, id_laboratorio, fecha_hora y otros campos que no son importantes para el caso.

Necesito saber el laboratorio en el que hubieron mas ingresos durante una fecha determinada, lo que se me ocurrio es lo siguiente (segun yo es una manera bruta de hacerlo Hacer 13 consultas (una por laboratorio) de la sig manera:
Código SQL:
Ver original
  1. SELECT COUNT(rut) FROM ingreso WHERE id_lab='ABCD-1'                      
  2. SELECT COUNT(rut) FROM ingreso WHERE id_lab='ABCD-2'
etcétera etcétera (son 12 laboratorios)
Después de eso ir guardando los resultados en un arreglo (PHP) para luego comparar el mayor.
Que opinan de este método? se les ocurre algo mejor?.
Gracias de antemano
saludos
  #2 (permalink)  
Antiguo 05/01/2012, 09:28
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Contar registros y comparar

Hola Felipe_01:

Estás complicando demasiado una consulta bastante sencilla... Creo que no tienes muchas nociones del concepto de agrupación, por lo que te recomiendo que le des un vistazo al uso del GROUP BY en las sentencias SELECT. Checa este script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE ingreso (id INT, id_lab VARCHAR(6));
  2. Query OK, 0 rows affected (0.08 sec)
  3.  
  4. mysql> INSERT INTO ingreso VALUES (1, 'ABCD-1'),
  5.     -> (2, 'ABCD-2'),(3, 'ABCD-2'),(4, 'ABCD-2'),
  6.     -> (5, 'ABCD-4'),(6, 'ABCD-4'),(7, 'ABCD-3'),
  7.     -> (8, 'ABCD-4'),(9, 'ABCD-4'),(10, 'ABCD-1');
  8. Query OK, 10 rows affected (0.09 sec)
  9. Records: 10  Duplicates: 0  Warnings: 0
  10.  
  11. mysql> SELECT * FROM ingreso;
  12. +------+--------+
  13. | id   | id_lab |
  14. +------+--------+
  15. |    1 | ABCD-1 |
  16. |    2 | ABCD-2 |
  17. |    3 | ABCD-2 |
  18. |    4 | ABCD-2 |
  19. |    5 | ABCD-4 |
  20. |    6 | ABCD-4 |
  21. |    7 | ABCD-3 |
  22. |    8 | ABCD-4 |
  23. |    9 | ABCD-4 |
  24. |   10 | ABCD-1 |
  25. +------+--------+
  26. 10 rows in set (0.00 sec)
  27.  
  28. mysql> SELECT id_lab, COUNT(*) total
  29.     -> FROM ingreso GROUP BY id_lab;
  30. +--------+-------+
  31. | id_lab | total |
  32. +--------+-------+
  33. | ABCD-1 |     2 |
  34. | ABCD-2 |     3 |
  35. | ABCD-3 |     1 |
  36. | ABCD-4 |     4 |
  37. +--------+-------+
  38. 4 rows in set (0.00 sec)
  39.  
  40. mysql> SELECT id_lab, COUNT(*) total
  41.     -> FROM ingreso GROUP BY id_lab
  42.     -> ORDER BY total DESC LIMIT 1;
  43. +--------+-------+
  44. | id_lab | total |
  45. +--------+-------+
  46. | ABCD-4 |     4 |
  47. +--------+-------+
  48. 1 row in set (0.00 sec)

Si observas la segunda consulta, al utilizar el operador GROUP BY obtienes el total de registros asociados a cada id_lab, en tu caso como quieres obtener el que tenga más, simplemente tienes que ordenar los registros por el total (COUNT) y obtener el primer registro (LIMIT). Creo que esto es lo que necesitas. Si tienes dudas o problemas lo comentas en el foro.

Saludos
Leo.

Etiquetas: campos, php, registros, select, 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 20:55.