CinemaDB/Faza2B: cinemaDB-pogledi.sql

File cinemaDB-pogledi.sql, 10.7 KB (added by 233280, 5 days ago)
Line 
1
2
3--VIEW 1 – vw_film_available_showtimes
4--Го прикажува за секој филм во кои сали и кино се одржуваат проекции со слободни места.
5-- Може да се користи доколку сакаме за конкретен филм да провериме во која сала и кино се прикажува.
6CREATE VIEW vw_film_available_showtimes AS
7SELECT
8 m.movie_id,
9 m.title AS film,
10 m.duration AS trajanje_min,
11 c.name AS kino,
12 c.city AS grad,
13 h.hall_id,
14 h.name AS sala,
15 s.showtime_id,
16 s.start_time,
17 s.end_time,
18 s.base_price,
19 h.capacity AS vkupni_mesta,
20 COUNT(t.ticket_id) AS zafateni_mesta,
21 h.capacity - COUNT(t.ticket_id) AS slobodni_mesta
22FROM Movie m
23JOIN Showtime s ON s.movie_id = m.movie_id
24JOIN Hall h ON h.hall_id = s.hall_id
25JOIN Cinema c ON c.cinema_id = h.cinema_id
26LEFT JOIN Ticket t ON t.showtime_id = s.showtime_id
27GROUP BY
28 m.movie_id, m.title, m.duration,
29 c.name, c.city,
30 h.hall_id, h.name, h.capacity,
31 s.showtime_id, s.start_time, s.end_time, s.base_price
32HAVING h.capacity - COUNT(t.ticket_id) > 0
33ORDER BY m.title, s.start_time;
34
35--употреба доколку сакаме за конкретен филм да провериме
36SELECT * FROM vw_film_available_showtimes WHERE film = '3 Idiots';
37
38
39--VIEW 2 – vw_user_reservations
40--Ги прикажува сите резервации на одреден корисник со детали за филмот, салата, седиштето и плаќањето(историјата на резервации).
41-- Може да се користи доколку сакаме да ги видиме сите резервации на конкретен корисник по неговиот user_id или емаил
42CREATE VIEW vw_user_reservations AS
43SELECT
44 u.user_id,
45 u.first_name || ' ' ||
46 u.last_name AS korisnik,
47 u.email,
48 r.reservation_id,
49 r.reservation_date,
50 r.status AS status_rezervacija,
51 m.title AS film,
52 c.name AS kino,
53 h.name AS sala,
54 s.start_time,
55 s.end_time,
56 se.seat_row AS red,
57 se.seat_number AS broj_sediste,
58 st.type AS tip_sediste,
59 t.price AS cena_bilet,
60 rp.amount AS plateno,
61 rp.payment_method,
62 rp.payment_date
63FROM CinemaUser u
64JOIN Reservation r ON r.user_id = u.user_id
65JOIN Showtime s ON s.showtime_id = r.showtime_id
66JOIN Movie m ON m.movie_id = s.movie_id
67JOIN Hall h ON h.hall_id = s.hall_id
68JOIN Cinema c ON c.cinema_id = h.cinema_id
69LEFT JOIN Ticket t ON t.reservation_id = r.reservation_id
70LEFT JOIN Seat se ON se.seat_id = t.seat_id
71LEFT JOIN Seat_Type st ON st.seat_type_id = se.seat_type_id
72LEFT JOIN ReservationPayment rp ON rp.reservation_id = r.reservation_id
73ORDER BY u.user_id, s.start_time;
74--конкретна употреба на ова view според user_id
75SELECT * FROM vw_user_reservations WHERE user_id = 42;
76--или по email:
77SELECT * FROM vw_user_reservations WHERE email = 'sonja_popova_99996@mail.com';
78
79
80--VIEW 3 – vw_order_details
81--Ги прикажува деталите на секоја нарачка, вклучувајќи купувач, касиер, производи, количини и цени.
82-- Може да се користи доколку сакаме да ги видиме сите производи и вкупната цена за конкретна нарачка
83CREATE VIEW vw_order_details AS
84SELECT
85 co.order_id,
86 co.order_date,
87 u.user_id,
88 u.first_name || ' ' || u.last_name AS korisnik,
89 u.email,
90 u.phone,
91 e.first_name || ' ' || e.last_name AS kasijer,
92 p.product_id,
93 p.name AS proizvod,
94 op.quantity AS kolicina,
95 op.price_at_order AS cena,
96 (op.quantity * op.price_at_order) AS vkupna_cena_proizvod,
97 co.total_price AS vkupna_cena_naracka
98FROM CinemaOrder co
99JOIN CinemaUser u ON u.user_id = co.user_id
100JOIN Employee e ON e.employee_id = co.employee_id
101JOIN Order_Product op ON op.order_id = co.order_id
102JOIN Product p ON p.product_id = op.product_id
103ORDER BY co.order_id;
104
105--конкретна употреба според order_id
106SELECT * FROM vw_order_details WHERE order_id = 432;
107
108
109--VIEW 4 – vw_cinema_schedule_by_period
110--Го прикажува распоредот на проекции во одредено кино за зададен временски период со жанрови.
111--Може да се користи доколку сакаме да видиме кои филмови се прикажуваат во конкретно кино во одреден период
112CREATE VIEW vw_cinema_schedule_by_period AS
113SELECT
114 c.cinema_id,
115 c.name AS kino,
116 c.city AS grad,
117 s.start_time::DATE AS datum,
118 TO_CHAR(s.start_time, 'Day') AS den_naziv,
119 m.title AS film,
120 m.duration AS traenje,
121 h.name AS sala,
122 s.start_time,
123 s.end_time,
124 s.base_price AS cena,
125 STRING_AGG(DISTINCT g.name, ', ') AS zanrovi
126FROM Cinema c
127JOIN Hall h ON h.cinema_id = c.cinema_id
128JOIN Showtime s ON s.hall_id = h.hall_id
129JOIN Movie m ON m.movie_id = s.movie_id
130LEFT JOIN Genre_Movie gm ON gm.movie_id = m.movie_id
131LEFT JOIN Genre g ON g.genre_id = gm.genre_id
132GROUP BY c.cinema_id, c.name, c.city, s.showtime_id, s.start_time, s.end_time,
133 m.movie_id, m.title, m.duration, h.hall_id, h.name, s.base_price
134ORDER BY c.cinema_id, s.start_time;
135
136
137
138--VIEW 5 – vw_movie_reviews_summary
139--Може да се користи доколку сакаме да ја видиме просечната,минималната и максималната оцена и вкупниот број рецензии за конкретен филм.
140--Исто така од кои жанрови е тој филм
141CREATE MATERIALIZED VIEW vw_movie_reviews_summary AS
142SELECT
143 m.movie_id,
144 m.title,
145 m.release_year,
146 m.language,
147 ROUND(AVG(r.rating), 2) AS avg_rating,
148 COUNT(r.review_id) AS total_reviews,
149 MAX(r.rating) AS max_rating,
150 MIN(r.rating) AS min_rating,
151 STRING_AGG(DISTINCT g.name, ', ') AS genres
152FROM Movie m
153LEFT JOIN Review r ON r.movie_id = m.movie_id
154LEFT JOIN Genre_Movie gm ON gm.movie_id = m.movie_id
155LEFT JOIN Genre g ON g.genre_id = gm.genre_id
156GROUP BY m.movie_id, m.title, m.release_year, m.language;
157----конкретна употреба според movie_id или пак според име на филм
158SELECT * FROM vw_movie_reviews_summary WHERE movie_id = 1;
159SELECT * FROM vw_movie_reviews_summary WHERE title = 'Inception';
160
161
162--VIEW 6 – vw_showtime_schedule
163--Прикажува основни информации за секоја проекција — филм, кино, сала, време, цена и капацитет.
164--Може да се користи доколку сакаме брзо да ги видиме деталите за конкретна проекција
165CREATE VIEW vw_showtime_schedule AS
166SELECT
167 s.showtime_id,
168 m.title AS movie_title,
169 m.duration,
170 c.name AS cinema_name,
171 h.name AS hall_name,
172 s.start_time,
173 s.end_time,
174 s.base_price,
175 h.capacity AS total_seats
176FROM Showtime s
177JOIN Movie m ON m.movie_id = s.movie_id
178JOIN Hall h ON h.hall_id = s.hall_id
179JOIN Cinema c ON c.cinema_id = h.cinema_id;
180--конкретна употреба со id на некоја проекција
181SELECT * FROM vw_showtime_schedule WHERE showtime_id = 3;
182
183
184--VIEW 7 – vw_popular_movies
185--Ги рангира филмовите според вкупниот број на резервации со додадена просечна оцена од рецензиите.
186-- Може да се користи доколку сакаме да видиме кои филмови се најпопуларни и најгледани
187CREATE VIEW vw_popular_movies AS
188SELECT
189 m.movie_id,
190 m.title,
191 m.release_year,
192 COUNT(r.reservation_id) AS total_reservations,
193 mrs.avg_rating
194FROM Movie m
195JOIN Showtime s ON s.movie_id = m.movie_id
196JOIN Reservation r ON r.showtime_id = s.showtime_id
197LEFT JOIN vw_movie_reviews_summary mrs ON mrs.movie_id = m.movie_id
198GROUP BY m.movie_id, m.title, m.release_year, mrs.avg_rating
199ORDER BY total_reservations DESC;
200
201
202
203--VIEW 8 – vw_presentation_rights
204--Прикажува кои кина имаат право да прикажуваат одреден филм и во кој временски период.
205-- Може да се користи доколку сакаме да провериме кои кина имаат дозвола за прикажување на конкретен филм
206CREATE VIEW vw_presentation_rights AS
207SELECT
208 pr.presentationRights_id,
209 m.title AS film,
210 m.release_year,
211 c.name AS kino,
212 c.city AS grad,
213 pr.start_date,
214 pr.end_date
215FROM PresentationRights pr
216JOIN Movie m ON m.movie_id = pr.movie_id
217JOIN Cinema c ON c.cinema_id = pr.cinema_id;
218-- за конкретен филм кои кина имаат дозвола да го прикажуваат
219SELECT * FROM vw_presentation_rights WHERE film = 'The Godfather';
220-- за конкретно кино кои филмови има дозвола да ги прикажува
221SELECT * FROM vw_presentation_rights WHERE kino = 'CinemaHouse 1';
222
223
224--VIEW 9 – vw_monthly_revenue
225--Ги прикажува месечните приходи по кино врз основа на извршените плаќања за резервации.
226--Може да се користи доколку сакаме да ги видиме приходите за конкретно кино во одреден месец:
227CREATE VIEW vw_monthly_revenue AS
228SELECT
229 DATE_TRUNC('month', rp.payment_date) AS month,
230 c.name AS cinema_name,
231 SUM(rp.amount) AS revenue,
232 COUNT(rp.payment_id) AS num_payments
233FROM ReservationPayment rp
234JOIN Reservation r ON r.reservation_id = rp.reservation_id
235JOIN Showtime s ON s.showtime_id = r.showtime_id
236JOIN Hall h ON h.hall_id = s.hall_id
237JOIN Cinema c ON c.cinema_id = h.cinema_id
238GROUP BY DATE_TRUNC('month', rp.payment_date), c.name
239ORDER BY month;