Cita:
Empezado por paciencia_mucha
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