Originariamente inviato da michellemabelle
Ho provato a farla e mi esce così, non mi dà errore ma non sono neanche sicura che esca corretta:

codice:
 
SELECT annuncio.id_a, r1.comune, im1.tipo 
FROM annuncio JOIN immobile im1 ON (annuncio.id_i = im1.id_i) JOIN recapito r1 ON (im1.id_i = r1.id_i)
WHERE annuncio.prezzo IS NOT NULL 
AND (annuncio.prezzo/im1.mq) < ALL 
                                (SELECT (AVG(annuncio.prezzo)/im2.mq)*20/100 
                                 FROM annuncio JOIN immobile im2 ON (annuncio.id_i = im2.id_i)    
                                 JOIN recapito r2 ON (im2.id_i = r2.id_i)
                                 WHERE annuncio.prezzo IS NOT NULL AND annuncio.attivo = TRUE
                                  GROUP BY im2.mq)
GROUP BY r1.comune, im1.tipo, annuncio.id_a
ORDER BY annuncio.id_a
ciao, premesso che forse sono io che oggi non connetto bene....

volevo fare qualche prova con i tuoi dati, ma trovo difficoltà a crearmi il db tramite cio che hai postato.

hai scritto tu la struttura di questo db?
io credo che la citta dell'immobile dovrebbe essere rappresentata da un id e non da uno nome citta, nome prvincia e nome regione

ad ogni modo, io cercherei prima di scrivere una query per ottenere
"il costo medio al metro quadro degli annunci attivi per immobili della stessa città e della stessa tipologia."
quindi qualcosa del genere:

codice:
SELECT 
immobile.tipo,
recapito.comune,
recapito.provincia,
recapito.regione,
AVG(annuncio.prezzo)/im2.mq) prezzomedio
FROM annuncio 
JOIN immobile im2 ON (annuncio.id_i = im2.id_i)    
JOIN recapito r2 ON (im2.id_i = r2.id_i)
WHERE annuncio.prezzo IS NOT NULL AND annuncio.attivo = TRUE
GROUP BY 
immobile.tipo,
recapito.comune,
recapito.provincia,
recapito.regione
se tu, postassi le strutture tabelle in una sinatssi SQL più standard, e se postassi i dati in una sintassi tipo INSERT.... potrei approfondire un po di più.

se poi su skype stessi online...

ciao