Je me demande si quelqu'un peut faire la lumière sur une requête SQL avec laquelle je travaille;Requête retournant les mêmes sommes - oracle sql
J'ai construit cette requête;
SELECT SUM(TICKET_TYPE.PRICE) AS TOTALCINEMASALES, CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
FROM RESERVATION, TICKET, TICKET_TYPE, CINEMA, PERFORMANCE
WHERE TICKET_TYPE.TICKET_TYPE_ID = TICKET.TICKET_TYPE_ID
AND TICKET.RESERVATION_ID = RESERVATION.RESERVATION_ID
AND RESERVATION.PERFORMANCE_ID = PERFORMANCE.PERFORMANCE_ID
AND CINEMA.LOCATION = 'SKIPTON'
AND PERFORMANCE.PERFORMANCE_DATE BETWEEN to_date('01/03/2009','DD/MM/yyyy') AND to_date('07/04/2009','DD/MM/yyyy')
GROUP BY
CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
ORDER BY
TOTALCINEMASALES;
Chaque fois que je le lance, il retourne l'ensemble sam des sommes sur chaque ligne pour totalcinemasales, mais je sais qu'il ya différents niveaux de ventes de billets, etc. se sont assis dans la base de données, il le fait pour chaque loaction que je change , des indications sur la façon dont je pourrais l'améliorer?
Merci
Merci, ce que vous ne pouvez pas voir (probablement la raison du problème après avoir lu votre suggestion) est qu'il n'y a pas de lien direct de la performance au cinéma, j'ai utilisé cinema> screen (cinema_id)> run (screen_id >> performance (run_id) - Devrais-je inclure ces deux tables et en ajoutant «et» pour le lin ks? ou ansi se joint, même si je sens que j'ai besoin d'entendre ce que j'en ai entendu dire un peu plus. –
Oui, vous devez joindre toutes les tables. Si vous ne le faites pas, vous obtenez un produit cartésien, ce qui signifie que toutes les combinaisons de Cinema et les autres tables jointes sont renvoyées. Pour voir ce que je veux dire, supprimez la clause group by et la SUM de la clause select. Avec le filtre, vous supprimez toutes les combinaisons inutiles. –
merci Stefan, va essayer –