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

query con doble group

Estas en el tema de query con doble group en el foro de Mysql en Foros del Web. Hola amigos tengo este problemita este mi query original para obtener aquellos clientes con 1 sola cuenta de una tabla llamada cuenta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 26/11/2012, 15:16
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta query con doble group

Hola amigos tengo este problemita
este mi query original para obtener aquellos clientes con 1 sola cuenta de una tabla llamada cuenta


Código MySQL:
Ver original
  1. cuentas.cue_zona,
  2. clientes.client_id,
  3. clientes.client_nombre,
  4. clientes.client_rfc,
  5. Count(cuentas.client_id) AS TIENE,
  6. cuentas.cue_ciudad,
  7. cuentas.cue_asigBandera,
  8. cuentas.cue_regionBandera,
  9. cuentas.cue_capaid,
  10. cuentas.cue_estatus
  11. cuentas
  12. LEFT JOIN clientes ON clientes.client_id = cuentas.client_id
  13. cuentas.cue_estatus = 'act' AND
  14. cuentas.cue_asigBandera = 2012 AND
  15. cuentas.cue_regionBandera = 7
  16. cuentas.client_id
  17. TIENE = 1
  18. cuentas.cue_zona ASC
hasta aqui va bien el problema es que debo saber
cuantos registros hay por zona pero de aquellos clientes que solo tienen
1 sola cuenta



Uploaded with ImageShack.us

Uploaded with ImageShack.us

lo que trato de saber es que lo muestre

veracuz --20
guerrro--30
puebla--50
..

saber por zona cuantos registros hay

espero me puedan asesorar amigos
saludos
espero sus comentarios
__________________
gerardo

Última edición por gnzsoloyo; 26/11/2012 a las 15:19 Razón: Código SQL mal etiquetado
  #2 (permalink)  
Antiguo 27/11/2012, 02:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: query con doble group

Código MySQL:
Ver original
  1. SELECT tuConsulta.cue_zona, count(*) as registros
  2. FROM (.....) as tuConsulta
  3. GROUP BY tuConsulta.cue_zona;

es esto?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 27/11/2012 a las 02:30
  #3 (permalink)  
Antiguo 27/11/2012, 10:21
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: query con doble group

muchas gracias por darte el tiempo en responder
si el query funciona pero el detalle
es que ya me toma aquellos client_id con mas de 1 registro
con el HAVING podria ver quienes tienen un 1 solo registro
Código:
HAVING
TIENE = 1
y lo que trato de saber en base a lo que optuve
del query que expongo agrupar por zona y saber cuanto hay

saludos y muchas gracias
__________________
gerardo
  #4 (permalink)  
Antiguo 27/11/2012, 10:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: query con doble group

Substituye los ...... por tu consulta.


Código MySQL:
Ver original
  1. SELECT tuConsulta.cue_zona, count(*) as registros
  2. cuentas.cue_zona,
  3. clientes.client_id,
  4. clientes.client_nombre,
  5. clientes.client_rfc,
  6. Count(cuentas.client_id) AS TIENE,
  7. cuentas.cue_ciudad,
  8. cuentas.cue_asigBandera,
  9. cuentas.cue_regionBandera,
  10. cuentas.cue_capaid,
  11. cuentas.cue_estatus
  12. cuentas
  13. LEFT JOIN clientes ON clientes.client_id = cuentas.client_id
  14. cuentas.cue_estatus = 'act' AND
  15. cuentas.cue_asigBandera = 2012 AND
  16. cuentas.cue_regionBandera = 7
  17. cuentas.client_id
  18. TIENE = 1
  19. cuentas.cue_zona ASC) as tuConsulta
  20. GROUP BY tuConsulta.cue_zona;

a partir de esto simplifica, optimiza y mejora lo que quieras.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 27/11/2012, 10:48
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, 5 meses
Puntos: 2658
Respuesta: query con doble group

da la impresión de que no has entendido completamente la propuesta.
La idea es que si lo que quieres es saber cuántos registros hay en cada zona tal que correspondan sólo a clientes con una única cuenta, eso es una consulta sobre una subconsulta:
Código MySQL:
Ver original
  1. SELECT T1.cue_zona, count(*)  registros
  2.     (SELECT
  3.         CU.cue_zona,
  4.         C.client_id,
  5.         C.client_nombre,
  6.         C.client_rfc,
  7.         Count(CU.client_id) TIENE,
  8.         CU.cue_ciudad,
  9.         CU.cue_asigBandera,
  10.         CU.cue_regionBandera,
  11.         CU.cue_capaid,
  12.         CU.cue_estatus
  13.     FROM
  14.         cuentas CU INNER JOIN clientes C ON CU.client_id = C.client_id
  15.     WHERE
  16.         CU.cue_estatus = 'act' AND
  17.         CU.cue_asigBandera = 2012 AND
  18.         CU.cue_regionBandera = 7
  19.     GROUP BY CU.client_id
  20.     HAVING TIENE = 1
  21.     ORDER BY CU.cue_zona ASC) T1
  22. GROUP BY tuConsulta.cue_zona;
Ahora bien, si lo que quieres es un registro de subtotal por cada cuenta, más el total final, la cosa es completamente diferente.
Andaría por acá:
Código MySQL:
Ver original
  1.     CU.cue_zona,
  2.     C.client_id,
  3.     C.client_nombre,
  4.     C.client_rfc,
  5.     Count(CU.client_id) AS TIENE,
  6.     CU.cue_ciudad,
  7.     CU.cue_asigBandera,
  8.     CU.cue_regionBandera,
  9.     CU.cue_capaid,
  10.     CU.cue_estatus
  11.     cuentas CU INNER JOIN clientes C ON CU.client_id = C.client_id
  12.     CU.cue_estatus = 'act' AND
  13.     CU.cue_asigBandera = 2012 AND
  14.     CU.cue_regionBandera = 7
  15. GROUP BY CU.client_id, CU.cue_zona ASC WITH ROLLUP
  16. HAVING TIENE = 1;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 27/11/2012, 10:57
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: query con doble group

muchas gracias gnzsoloyo y a quimfv
por darse el tiempo
en este momento estare haciendo las pruebas

saludos
__________________
gerardo
  #7 (permalink)  
Antiguo 27/11/2012, 11:05
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: query con doble group

gracias era lo que necesitaba

saludos amigo

Cita:
Iniciado por quimfv Ver Mensaje
Substituye los ...... por tu consulta.


Código MySQL:
Ver original
  1. SELECT tuConsulta.cue_zona, count(*) as registros
  2. cuentas.cue_zona,
  3. clientes.client_id,
  4. clientes.client_nombre,
  5. clientes.client_rfc,
  6. Count(cuentas.client_id) AS TIENE,
  7. cuentas.cue_ciudad,
  8. cuentas.cue_asigBandera,
  9. cuentas.cue_regionBandera,
  10. cuentas.cue_capaid,
  11. cuentas.cue_estatus
  12. cuentas
  13. LEFT JOIN clientes ON clientes.client_id = cuentas.client_id
  14. cuentas.cue_estatus = 'act' AND
  15. cuentas.cue_asigBandera = 2012 AND
  16. cuentas.cue_regionBandera = 7
  17. cuentas.client_id
  18. TIENE = 1
  19. cuentas.cue_zona ASC) as tuConsulta
  20. GROUP BY tuConsulta.cue_zona;

a partir de esto simplifica, optimiza y mejora lo que quieras.
__________________
gerardo

Etiquetas: doble, group, join, query, 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 01:52.