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

GROUP BY en la siguiente consulta

Estas en el tema de GROUP BY en la siguiente consulta en el foro de Mysql en Foros del Web. Buenas a todos, solicito de favor su ayuda, tengo la siguiente consulta: SELECT bd1,C1, bd1,C2, bd1,C3, bd1,C4, bd2,C1, bd2,C2, bd2,C3, bd2,C4, bd2,C5, bd2,C6, bd3,C1, bd4,C1, ...
  #1 (permalink)  
Antiguo 16/09/2012, 20:21
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 2 meses
Puntos: 3
GROUP BY en la siguiente consulta

Buenas a todos, solicito de favor su ayuda, tengo la siguiente consulta:

SELECT bd1,C1, bd1,C2, bd1,C3,
bd1,C4,
bd2,C1, bd2,C2, bd2,C3,
bd2,C4, bd2,C5, bd2,C6,
bd3,C1,
bd4,C1, bd4,C2,
bd5,C1, bd5,C2, bd5,C3,
bd6,C1
FROM ((((bd1
INNER JOIN bd2 ON bd1,C2 = bd2.C7)
INNER JOIN bd4 ON bd2,C1 = bd4.C3)
INNER JOIN bd5 ON bd1,C3 = bd5.C4)
LEFT JOIN bd3 ON bd3.C2 = bd4,C1)
LEFT JOIN bd6 ON bd6.C2 = bd5,C3
WHERE bd2,C3<> 0
AND ((bd1,C4>='01.06.2012')
AND (bd1,C4<='16.06.2012'))

Lo que necesito es hacer una suma de bd2.C4 en una columna y bd2.C5 en otra columna, agrupados por bd1.C2, y la verdad es que no encuentro la forma, si alguien me puede ayudar se lo agradecere.

Saludos y gracias anticipadas.
  #2 (permalink)  
Antiguo 18/09/2012, 06:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: GROUP BY en la siguiente consulta

Código MySQL:
Ver original
  1. SELECT bd1.C2, SUM(bd2.C4) as SC4,SUM(bd2.C5) as SC5
  2. FROM ((((bd1
  3. INNER JOIN bd2 ON bd1,C2 = bd2.C7)
  4. INNER JOIN bd4 ON bd2,C1 = bd4.C3)
  5. INNER JOIN bd5 ON bd1.C3 = bd5.C4)
  6. LEFT JOIN bd3 ON bd3.C2 = bd4.C1)
  7. LEFT JOIN bd6 ON bd6.C2 = bd5.C3
  8. WHERE bd2.C3<> 0
  9. AND ((bd1.C4>='01.06.2012')
  10. AND (bd1.C4<='16.06.2012'))
  11. GROUP BY bd1.C2;

Ojo con los puntos y las comas...

Si bd1.C4 es una fecha tiene un formato que te va a traer muchos problemas y ademas no te permitirá usar las funciones de fecha...

El formato de fecha para MySql es YYYY-mm-dd y es muy recomendable usarlo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/09/2012, 11:46
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: GROUP BY en la siguiente consulta

Gracias quimfv

Ok ya cheque lo de las fechas, fue una fumada mia cuando estaba escribiendo el mensaje.

Por el lado de tu consulta, ya lo solucione, en este momento no tengo la consulta a la mano despues la posteo, pero la duda que me queda en tu consulta y ya que omitiste todos los campos del

SELECT bd1,C1, bd1,C2, bd1,C3,
bd1,C4,
bd2,C1, bd2,C2, bd2,C3,
bd2,C4, bd2,C5, bd2,C6,
bd3,C1,
bd4,C1, bd4,C2,
bd5,C1, bd5,C2, bd5,C3,
bd6,C1

Cundo utilizas GROUP BY tambien los tienes que mencionar a exepcion de los calculados como el SUM, COUNT, Etc.

Es correcto lo que te menciono??

Saludos
  #4 (permalink)  
Antiguo 25/09/2012, 13:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: GROUP BY en la siguiente consulta

Hola computer_si:

Con permiso de quimfv, meto mi cuchara en el post:

Código:
Cundo utilizas GROUP BY tambien los tienes que mencionar a exepcion 
de los calculados como el SUM, COUNT, Etc.
No necesariamente... algunos otros DBMS como SQL Server y ORACLE te exigen colocar en el GROUP BY todos aquellos campos que listas en el SELECT y que no estén incluidos en una función de agrupación, sin embargo MySQL te permite omitirlos, sin embargo tiene un comportamiento especial que trataré de explicar con este script, supongamos que tenemos estos datos

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

Observa qué es lo que muestra cada uno de los distintos "acomodos" de los campos:


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

muestra la primer aparición de los campos 1 y 2 para cada categoría que se están agrupando.

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

Para el caso de los campos que se incluyen en el SELECT, pero que no se incluyen en el GROUP BY como el campo 1 te muestra la primer aparición, independientemente del valor que le corresponda en al campo 2

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

Aquí creo que no hay problema con la utilización.

Código MySQL:
Ver original
  1. mysql> SELECT descripcion, campo1, MIN(campo2) FROM tabla
  2.     -> GROUP BY descripcion, campo1;
  3. +-------------+--------+-------------+
  4. | descripcion | campo1 | MIN(campo2) |
  5. +-------------+--------+-------------+
  6. | dos         |      1 |           3 |
  7. | dos         |      2 |           2 |
  8. | dos         |      3 |           1 |
  9. | tres        |      1 |           3 |
  10. | tres        |      2 |           2 |
  11. | tres        |      3 |           1 |
  12. | uno         |      1 |           1 |
  13. | uno         |      2 |           2 |
  14. | uno         |      3 |           3 |
  15. +-------------+--------+-------------+
  16. 9 rows in set (0.00 sec)

Observa que al incluir el campo 2 en el GROUP BY aquí si se considera para hacer los cortes en las agrupaciones.

Saludos
Leo.

Etiquetas: group, join, select, siguiente
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 19:37.