Comunidad de diseño web y desarrollo en internet online

Consulta con Count entre 2 tablas

Citar            
MensajeEscrito el 30 Ago 2013 02:20 am
Holas,

Ante todo quiero recalcar que soy novato en MySQL, he buscado mucho la respuesta y la verdad no he entendido las soluciones que daban.
Mi problema es el siguiente:

Tengo dos tablas:

SIS_UBIGEO
cod_dpto cod_prov cod_dist dsc_nombre

VEN_NATURAL
cod_natural dsc_ubigeo

La tabla ubigeo propociona en conjunto un codigo de 6 cifras (2 de departamento, 2 de provincia, 2 de distrito) de esta manera puedo saber su ubicacion geografica.

En la tabla VEN_NATURAL grabo el codigo del cliente y el los 6 digitos del ubigeo.

Lo que necesito es contar cuantos clientes hay en el mismo departamento (por ejemplo todos los clientes cuyos 2 primeros digitos del ubigeo sean 15) y luego traducir el codigo de ubigeo por su respectivo nombre.

Lo explico con un ejemplo:

VEN_NATURAL
cod_natural dsc_ubigeo
1 150101
2 150102
3 150101


Despues hacer un count y obtener:
dsc_ubigeo count
150101 2
150102 1


Luego poder traducir la descripcion del ubigeo y obtener
dsc_ubigeo count
lima 2
ancon 1

Muchas gracias por su ayuda

Por chochito_alegre

51 de clabLevel



Genero:Masculino  

Lima - Perú

firefox
Citar            
MensajeEscrito el 30 Ago 2013 03:49 am
¿Esa es la estructura definitiva de las tablas? Podrías almacenar el código construido en la tabla sis_ubigeo para evitar usar funciones de concatenación al realizar el JOIN.

Algo que podría funcionarte sería lo siguiente:

Código :

SELECT   b.dsc_ubigeo,
      b.cantidad,
      a.dsc_nombre
FROM   sis_ubigeo a

INNER JOIN (SELECT   dsc_ubigeo, 
            COUNT(dsc_ubigeo) as cantidad
           FROM   ven_natural) b
ON b.dsc_ubigeo = CONCAT(a.cod_dpto, a.cod_prov, a.cod_dist)


Básicamente lo que haces es un subquery en el inner join agrupando de una vez por la cantidad de repeticiones.

Espero te sirva.

Saludos.

Por joseayram

1 de clabLevel



Genero:Masculino  

Web Developer

chrome
Citar            
MensajeEscrito el 31 Ago 2013 05:24 am
joseayram,

Mil gracias por la ayuda!!!!!!
Cuando hice copy / paste al codigo me boto la suma de todos los clientes en un solo distrito.... pero ya habia leido que eso pasaba si no le ponia GROUP BY dsc_ubigeo... asi que se lo coloque y funciono perfectamente!!!!!

Para aquella persona que necesite algo similar el codigo final queda asi:

Código MySQL :

SELECT   b.dsc_ubigeo,
      b.cantidad,
      a.dsc_nombre
FROM   SIS_UBIGEO a

INNER JOIN (SELECT   dsc_ubigeo, 
            COUNT(dsc_ubigeo) as cantidad
           FROM   VEN_NATURAL GROUP BY dsc_ubigeo) b
ON b.dsc_ubigeo = CONCAT(a.cod_dpto, a.cod_prov, a.cod_dist)
ORDER BY `b`.`cantidad`  DESC


Nuevamente joseayram, agradezco tu ayuda.

Saludos

Por chochito_alegre

51 de clabLevel



Genero:Masculino  

Lima - Perú

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.