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