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

agrupar por numparada

Estas en el tema de agrupar por numparada en el foro de Mysql en Foros del Web. Hola , una duda que tengo seria si yo quisiera agrupar todo esto por numparada... y que me diga cuantos HF tiene cada conductor( que ...
  #1 (permalink)  
Antiguo 09/06/2011, 16:42
Avatar de FerraN10  
Fecha de Ingreso: junio-2011
Ubicación: Sant Joan Despí
Mensajes: 79
Antigüedad: 12 años, 10 meses
Puntos: 3
Mensaje agrupar por numparada

Hola , una duda que tengo seria si yo quisiera agrupar todo esto por numparada... y que me diga cuantos HF tiene cada conductor( que cuente un HF por las distintas paradas que hay) , incluyendo el 0 del que no tenga...

tengo los trabajadores con sus campos:

trabajador,numparada,tracking,incidencia

H1 ,1,AAAA, HF
H1 ,1,AAAB, HF
H1 ,1,AAAC, HF
H1 ,2,AAAD, HF
H1 ,2,AAAE, HF
H1 ,3,AAAF, HF
H1 ,3,AAAG, HF
TOTAL 3, "HF"


H2,1,VCXZ, HF
H2,2,FFFF, HF
H2,2,ZXCV,KB
TOTAL 2, "HF"


H3,1,VCXZ,KB
H3,2,XXXX,KB
H3,3,ZXCV,KB
TOTAL 0, "HF"


H4 ,1,AVCS, HF
H4 ,2,AAVC, HF
H4 ,3,ARRR, HF
H4 ,4,UUUT,KB
H4 ,5,JHUM,KB
TOTAL 3, "HF"


H5 ,1,AAAZ, HF
H5 ,1,AAAF, HF
H5 ,1,AAAE, HF
H5 ,1,AADF, HF
H5 ,1,AABV, HF
H5 ,2,AAEX, HF
TOTAL 2, "HF"

Lo que hago es querer agrupar por numero de parada , yo uso la siguiente consulta :

Código MySQL:
Ver original
  1. SELECT count(distinct numparada)
  2. from datos
  3. where fecha='2011-05-02' AND incidencia IN ('HF')
  4. group by conductor;

y me sale los trabajadores que tienen , pero no los que tienen 0 .

En otras consultas el IF me ha funcionado bien pero aqui no hay manera de que me salga , si me pudieras echar una mano ,te lo agradeceria...

Gracias un saludo
__________________
El fin de mi tarea no fue el fin sino el trayecto
Si vivir es la odisea el horizonte que clarea
En esta aldea parece perfecto así que bienvenido lo que sea

Última edición por FerraN10; 09/06/2011 a las 17:09
  #2 (permalink)  
Antiguo 09/06/2011, 21:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: agrupar por numparada

Prueba con:
Código MySQL:
Ver original
  1. SELECT trabajador, numparada, incidencia, COUNT(*) Incidencias
  2. FROM datos
  3. WHERE fecha='2011-05-02' AND incidencia IN ('HF')
  4. GROUP BY trabajador, numparada WITH ROLLUP;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/06/2011, 12:21
Avatar de FerraN10  
Fecha de Ingreso: junio-2011
Ubicación: Sant Joan Despí
Mensajes: 79
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: agrupar por numparada

No me acaba de funcionar bien , no me dice cuantos HF tiene cada conductor, agrupando por conductor y numero de parada.... :( que funciona hace el WITH ROLLUP en este caso ??

gracias
__________________
El fin de mi tarea no fue el fin sino el trayecto
Si vivir es la odisea el horizonte que clarea
En esta aldea parece perfecto así que bienvenido lo que sea
  #4 (permalink)  
Antiguo 10/06/2011, 14:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: agrupar por numparada

Hola FerraN10:

No me queda claro si necesitas que aparezcan los datos de de la tabla y después de cada grupo los totales o solamente los totales, ya que serían dos cosas distintas:

Por el tipo de consulta que estás poniendo como ejemplo creo que solo te interesan los totales, así es que se me ocurre que hagas algo como esto;

Código MySQL:
Ver original
  1. mysql> create table datos (trabajador varchar(10), numparada int,
  2.     -> tracking varchar(10), incidencia varchar(10));
  3. Query OK, 0 rows affected (0.09 sec)
  4.  
  5. mysql> insert into datos values ('H1',1,'AAAA', 'HF'),('H1',1,'AAAB', 'HF'),
  6.     -> ('H1',1,'AAAC', 'HF'),('H1',2,'AAAD', 'HF'),('H1',2,'AAAE', 'HF'),
  7.     -> ('H1',3,'AAAF', 'HF'),('H1',3,'AAAG', 'HF'),('H2',1,'VCXZ', 'HF'),
  8.     -> ('H2',2,'FFFF', 'HF'),('H2',2,'ZXCV', 'KB'),('H3',1,'VCXZ', 'KB'),
  9.     -> ('H3',2,'XXXX', 'KB'),('H3',3,'ZXCV', 'KB'),('H5',1,'AAAZ', 'HF'),
  10.     -> ('H5',1,'AAAF', 'HF'),('H5',1,'AAAE', 'HF'),('H5',1,'AADF', 'HF'),
  11.     -> ('H5',1,'AABV', 'HF'),('H5',2,'AAEX', 'HF');
  12. Query OK, 19 rows affected (0.03 sec)
  13. Records: 19  Duplicates: 0  Warnings: 0
  14.  
  15. mysql> select T1.trabajador, sum(if(T1.incidencia IN ('HF'), 1, 0)) total
  16.     -> from
  17.     -> (
  18.     -> SELECT
  19.     -> trabajador, numparada, incidencia
  20.     -> FROM datos
  21.     -> GROUP BY trabajador, numparada, incidencia
  22.     -> )
  23.     -> T1
  24.     -> group by T1.Trabajador;
  25. +------------+-------+
  26. | trabajador | total |
  27. +------------+-------+
  28. | H1         |     3 |
  29. | H2         |     2 |
  30. | H3         |     0 |
  31. | H5         |     2 |
  32. +------------+-------+
  33. 4 rows in set (0.00 sec)

Si por el contrario necesitas también presentar los datos de tu tabla entonces había que hacerlo diferente, tal vez con el WITH ROLLUP, como bien lo comenta gnzsoloyo.

si no sabes para qué se utiliza el modificador WITH ROLLUP dale un vistazo a la documentación:

12.10.2. Modificadores de GROUP BY

Saludos y espero tus comentarios.
Leo.
  #5 (permalink)  
Antiguo 11/06/2011, 06:40
Avatar de FerraN10  
Fecha de Ingreso: junio-2011
Ubicación: Sant Joan Despí
Mensajes: 79
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: agrupar por numparada

[/QUOTE]

Hola buenas , me ha funcionado , lo que hago es lo siguiente :

Creo la tabla produccion_temporal que se la consulta de las paradas agrupadas junto con el trabajador

Código MySQL:
Ver original
  1. CREATE TABLE produccion_temporal AS
  2. SELECT trabajador,numparada,incidencia
  3. FROM datos
  4. WHERE fecha='2011-05-02'
  5. GROUP BY trabajador,numparada;

Hago la consulta de la tabla produccion_temporal y es donde hago la suma de los totales de cada trabajador...

Código MySQL:
Ver original
  1. SELECT trabajador, sum(if(incidencia IN ('HF'), 1, 0)) total
  2. FROM produccion_temporal
  3. GROUP BY trabajdor;

Seguidamente de hacer la consulta borro la tabla...
Es optimo hacer esto?? Muchas gracias me ha funcionado a la perfeccion...

Un saludo y de nuevo muchas gracias
__________________
El fin de mi tarea no fue el fin sino el trayecto
Si vivir es la odisea el horizonte que clarea
En esta aldea parece perfecto así que bienvenido lo que sea
  #6 (permalink)  
Antiguo 11/06/2011, 09:14
Avatar de FerraN10  
Fecha de Ingreso: junio-2011
Ubicación: Sant Joan Despí
Mensajes: 79
Antigüedad: 12 años, 10 meses
Puntos: 3
Mensaje Respuesta: agrupar por numparada

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola FerraN10:

No me queda claro si necesitas que aparezcan los datos de de la tabla y después de cada grupo los totales o solamente los totales, ya que serían dos cosas distintas:

Por el tipo de consulta que estás poniendo como ejemplo creo que solo te interesan los totales, así es que se me ocurre que hagas algo como esto;

Código MySQL:
Ver original
  1. mysql> create table datos (trabajador varchar(10), numparada int,
  2.     -> tracking varchar(10), incidencia varchar(10));
  3. Query OK, 0 rows affected (0.09 sec)
  4.  
  5. mysql> insert into datos values ('H1',1,'AAAA', 'HF'),('H1',1,'AAAB', 'HF'),
  6.     -> ('H1',1,'AAAC', 'HF'),('H1',2,'AAAD', 'HF'),('H1',2,'AAAE', 'HF'),
  7.     -> ('H1',3,'AAAF', 'HF'),('H1',3,'AAAG', 'HF'),('H2',1,'VCXZ', 'HF'),
  8.     -> ('H2',2,'FFFF', 'HF'),('H2',2,'ZXCV', 'KB'),('H3',1,'VCXZ', 'KB'),
  9.     -> ('H3',2,'XXXX', 'KB'),('H3',3,'ZXCV', 'KB'),('H5',1,'AAAZ', 'HF'),
  10.     -> ('H5',1,'AAAF', 'HF'),('H5',1,'AAAE', 'HF'),('H5',1,'AADF', 'HF'),
  11.     -> ('H5',1,'AABV', 'HF'),('H5',2,'AAEX', 'HF');
  12. Query OK, 19 rows affected (0.03 sec)
  13. Records: 19  Duplicates: 0  Warnings: 0
  14.  
  15. mysql> select T1.trabajador, sum(if(T1.incidencia IN ('HF'), 1, 0)) total
  16.     -> from
  17.     -> (
  18.     -> SELECT
  19.     -> trabajador, numparada, incidencia
  20.     -> FROM datos
  21.     -> GROUP BY trabajador, numparada, incidencia
  22.     -> )
  23.     -> T1
  24.     -> group by T1.Trabajador;
  25. +------------+-------+
  26. | trabajador | total |
  27. +------------+-------+
  28. | H1         |     3 |
  29. | H2         |     2 |
  30. | H3         |     0 |
  31. | H5         |     2 |
  32. +------------+-------+
  33. 4 rows in set (0.00 sec)

Si por el contrario necesitas también presentar los datos de tu tabla entonces había que hacerlo diferente, tal vez con el WITH ROLLUP, como bien lo comenta gnzsoloyo.

si no sabes para qué se utiliza el modificador WITH ROLLUP dale un vistazo a la documentación:

[URL="http://dev.mysql.com/doc/refman/5.0/es/group-by-modifiers.html"]12.10.2. Modificadores de GROUP BY[/URL]

Saludos y espero tus comentarios.
Leo.
Hola Leo , me ha funcionado a la perfeccion . LO que he echo es lo siguiente :

1.Creo una nueva tabla temporal que se llamara prod, con la ejecucion de la consulta....

Código MySQL:
Ver original
  1. DROP DATABASE prod;//para asegurarme que no de errores...
  2. select conductor,numparada,incidencia
  3. from datos
  4. where fecha='2011-05-02'
  5. group by conductor,numparada;

2.Ejecuto la consulta como me has comentado... sobre la tabla creada...

Código MySQL:
Ver original
  1. SELECT conductor, sum(if(incidencia IN ('HF'), 1, 0)) total
  2. FROM prod
  3. GROUP BY conductor;

Muchas gracias Leo, me ha ayudado muchissimo.... Mil gracias a todos por ayudarme!!!!!!

Un abrazoo y repito .... GRACIAS!!!!!!!!
__________________
El fin de mi tarea no fue el fin sino el trayecto
Si vivir es la odisea el horizonte que clarea
En esta aldea parece perfecto así que bienvenido lo que sea
  #7 (permalink)  
Antiguo 11/06/2011, 09:15
Avatar de FerraN10  
Fecha de Ingreso: junio-2011
Ubicación: Sant Joan Despí
Mensajes: 79
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: agrupar por numparada

graciass
  #8 (permalink)  
Antiguo 13/06/2011, 09:32
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: agrupar por numparada

Me alegra que te haya servido el código...

Saludos
Leo

Etiquetas: agrupar
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 14:07.