Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: max di un avg!

  1. #1

    max di un avg!

    Ciao a tutti!
    Avrei bisogno che mi aiutaste a completare una query!
    Questo è il testo della query:
    Trovare la città con il più alto costo medio di vendita al metro quadro di immobili ad uso privato rispetto alle città della stessa regione.
    Mentre questo è quello che ho fatto io fino adesso.

    codice:
     
    SELECT recapito.regione, recapito.comune, AVG(annuncio.prezzo/immobile.mq) AS costo_medio
    FROM annuncio JOIN immobile ON (annuncio.id_i = immobile.id_i)
    JOIN recapito ON (immobile.id_i = recapito.id_i)
    WHERE immobile.uso = 'privato' AND prezzo IS NOT NULL
    GROUP BY recapito.regione, recapito.comune
    HAVING AVG(annuncio.prezzo/immobile.mq) >= 
    ALL (SELECT AVG(annuncio.prezzo/immobile.mq) AS costo_medio
    FROM annuncio JOIN immobile ON (annuncio.id_i = immobile.id_i)
    JOIN recapito ON (immobile.id_i = recapito.id_i)
    WHERE immobile.uso = 'privato' AND prezzo IS NOT NULL
    GROUP BY recapito.regione, recapito.comune)
    ORDER BY recapito.regione, recapito.comune
    Così mi trova per ogni città inserita, quando il prezzo non è nullo, la media del costo per mq.

    Ma io devo trovare la città con il più alto costo!

    Non posso fare MAX(AVG(...)) perché Postgres non me lo permette!

    E ogni volta che provo ad aggiungerci anche il MAX trovo solo la città in assoluto più costosa per prezzo/mq!!!


    E per quanto riguarda questa, sapreste dirmi se è giusta o se sbaglio qualcosa?

    Trovare gli annunci di vendita di immobili il cui costo al metro quadro è inferiore al
    20% del costo medio al metro quadro degli annunci attivi per immobili della stessa città e della stessa tipologia.
    codice:
    SELECT annuncio.id_a, recapito.comune, immobile.tipo FROM annuncio JOIN immobile ON (annuncio.id_i = immobile.id_i) JOIN recapito ON (immobile.id_i = recapito.id_i)
    WHERE annuncio.prezzo IS NOT NULL 
    AND (annuncio.prezzo/immobile.mq) < 
    ALL (SELECT (annuncio.prezzo/immobile.mq)*20/100 FROM annuncio JOIN immobile ON (annuncio.id_i = immobile.id_i) JOIN recapito ON (immobile.id_i = recapito.id_i)
    WHERE annuncio.prezzo IS NOT NULL AND annuncio.attivo = TRUE)
    GROUP BY recapito.comune, immobile.tipo, annuncio.id_a
    ORDER BY annuncio.id_a

  2. #2
    up!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    dumpa strutture e righe del db (almeno alcune)

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ordina per prezzo medio in senso decrescente usando la clausola limit 1 per trovare il prezzo medio più altro e verifica a quale/i città corrisponde quel prezzo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da nicola75ss
    Ordina per prezzo medio in senso decrescente usando la clausola limit 1 per trovare il prezzo medio più altro e verifica a quale/i città corrisponde quel prezzo.
    tra l'altro postgres è ben più "furbo" di (ad esempio) mysql per l'uso del LIMIT e, di conseguenza, in generale queste query sono decisamente efficienti

  6. #6
    Sto provando ad usare il LIMIT ma non cambia niente rispetto a quella che ho postato io! Io non voglio la città più costosa in assoluto, ma la città più costosa per ogni regione!! Come posso gestirlo?

  7. #7
    Sto per diventare pazza!
    Per colpa di postgres che non mi permette di fare MAX(AVG(...))!

    Non c'è un modo per trovare la città con il più alto costo/mq per ogni regione?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    dumpa il db

  9. #9
    è che non ho idea di cosa voglia dire...

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    da pgadmin,
    database,
    schema,tabella
    tasto destro=>codice SQL=>
    codice create

    e poi
    codice della insert
    (ovviamente non è necessario che li metti tutti, se son tanti)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.