Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema query

  1. #1

    Problema query

    Buongiorno, vorrei porre alla vostra attenzione una query che riguarda la creazione di una vista che restituisce la percentuale media di occupazione delle sale(cinema) per ogni anno.
    Vi sono 3 tabelle in questione: sala, spettacolo e prenotazione.

    Sala(id_sala, nome, totale_posti)
    Spettacolo(id_spettacolo, id_film, id_sala, ora, data)
    Prenotazione(id_prenotazione, id_spettacolo, id_utente, fila, colonna)

    Qui di seguito vi posto la mia idea:


    CREATE VIEW occup_sale AS
    SELECT room.name AS Sala, DATE_FORMAT(date, '%Y') as Anno, ((COUNT(id_prenotation)*100)/total)/COUNT(DISTINCT show.id_show) AS Occupazione
    FROM data.show, prenotation, room
    WHERE prenotation.id_show=show.id_show
    AND room.id_room=show.id_room
    GROUP BY Anno
    Sembra funzionare ma solo fino ad un certo punto, infatti se per uno spettacolo non vengono fatte prenotazioni è come se non esistesse, invece deve esistere perchè incide sulla media!!!

    Come posso fare??

    grazie

  2. #2
    Pova così:
    codice:
    CREATE VIEW occup_sale AS
    SELECT room.name AS Sala, DATE_FORMAT(date, '%Y') as Anno, ((COUNT(isnull(id_prenotation,0))*100)/total)/COUNT(DISTINCT show.id_show) AS Occupazione
    FROM 
    room 
    inner join show 
    on room.id_room=show.id_room
    left join prenotation
    on prenotation.id_show=show.id_show
    GROUP BY Anno
    Non so se ci sono errori ma dovrebbe andare.

    Dunque, per prima cosa devi porre che non è detto che vi sia legame fra show e prenotation, quindi un join a livello di where non può andare (in oracle mi pare che si possa fare con una sintassi tipo (+)= o una cosa simile).

    Leghi room e show che sicuramente sono legati, ma leghi poi show e prenotation con una left, in questo modo dai la precedenza a show che sta a sinistra, così se anche non ci sono prenotazioni comunque te lo tira fuori.

    L'altro inconveniente è che anche se non ci sono prenotazioni con questo sistema te ne conta sempre almeno una (vedi l'isnull che ho aggiunto).

    Dovresti pensare ad una select un pò più complessa al limite

  3. #3
    Grazie per l'interesse

    Allora per cominciare prima di show ci vuole il nome del db perchè è una parola privata.
    Ho quindi corretto e provato ma mi da un qualche errore di sintassi :master:

  4. #4
    Ecco fatto, non c'era bisogno del parametro ISNULL, ho provato a toglierlo e mantenere il resto del codice che mi hai suggerito e sembra funzioni come deve!!!

    Grazie mille, mi hai salvato la vita

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.