Ver Mensaje Individual
  #13  
Antiguo 19-11-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Reputación: 23
poliburro Va por buen camino
Cita:
Empezado por paciencia_mucha Ver Mensaje
Hola tod@s:

Acabo de encontrar este foro y aunque he visto consultas similares, no consigo seguir adelante con un ejercicio, así que os solicito un poco de ayuda.

Tengo una base de datos con dos tablas:
Tabla 1 - Pisos: codigo_piso (clave principal) y código_postal
Tabla 2 - Ventas: codigo_piso (clave)

La base de datos refleja las ventas de los pisos y necesito mostrar los código postales donde se han vendido más pisos.

Si hago:
Muestro todos los códigos postales ordenados de mayor a menos por el número de ventas que se han efectuado. El resultado es:
08033 3
08120 3
17130 2
08018 1
08200 1

Lo que nesitaría es sólo mostrar os códigos postales de más ventas, osea:
08033
08120

Creo que se debería usar la función MAX, pero no sé como usar esta función de una cuenta.

¿Alguna idea? ¿Alguna recomendación? Os estaría muy agradecida.

Saludos

La manera en que lo planteas es un poco ambigua pero sujetandonos a tu ejemplo vamos a suponer que el max de todas las ventas será considerado como el mayor, entonces tendremos que obtener todos aquellos códigos postales que coincidan con esa venta. Para ello deberemos hacerlo de la siguiente manera:

Código SQL [-]


    Select *
      From (
              SELECT pisos.codi_postal_pis, 
                     count (*) As venuts
                FROM pisos pisos
           Left Join vendes vendes
                  On pisos.codi_pis = vendes.codi_pis
            GROUP BY pisos.codi_postal_pis
              Having Count(*) > 0         
           ) Datos
Inner Join (
             Select Max(venuts) As VantaMaxima
              From ( 
                       SELECT pisos.codi_postal_pis, 
                              count (*) As venuts
                         FROM pisos pisos
                    Left Join vendes vendes
                           On pisos.codi_pis = vendes.codi_pis
                     GROUP BY pisos.codi_postal_pis
                   ) Cuantos           

           ) Filtro
         On Datos.venuts = Filtro.VantaMaxima



Desde mi perspectiva sería mejor si defines un rango de valores que se podrían considerar los de mayores ventas. No se es mi perspectiva no conozco al 100% tu requerimiento.

Para ello necesitamos sacar el promedio de ventas entonces podriamos considerar como codigos postales de mayor venta aquellos mayores al promedio y menores o igual al máximo.

Considerando esto podriamos hacer lo siguiente:

Código SQL [-]


    Select *
      From (
              SELECT pisos.codi_postal_pis, 
                     count (*) As venuts
                FROM pisos pisos
           Left Join vendes vendes
                  On pisos.codi_pis = vendes.codi_pis
            GROUP BY pisos.codi_postal_pis
              Having Count(*) > 0         
           ) Datos
Inner Join (
             Select Max(venuts) As VantaMaxima, Avg(venuts) VentaPromedio
              From ( 
                       SELECT pisos.codi_postal_pis, 
                              count (*) As venuts
                         FROM pisos pisos
                    Left Join vendes vendes
                           On pisos.codi_pis = vendes.codi_pis
                     GROUP BY pisos.codi_postal_pis
                   ) Cuantos           

           ) Filtro
         On Datos.venuts > Filtro.VentaPromedio And
            Datos.venuts <= Filtro.VantaMaxima


Saluditos
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita