| 1 | -------------------------------------------------------------------------------
|
|---|
| 2 | --station_traffic_and_revenue Marija
|
|---|
| 3 |
|
|---|
| 4 | CREATE VIEW station_traffic_and_revenue AS
|
|---|
| 5 | SELECT
|
|---|
| 6 | s.station_id,
|
|---|
| 7 | s.station_name,
|
|---|
| 8 | s.city,
|
|---|
| 9 | COUNT(tk.ticket_id) AS passengers_departed,
|
|---|
| 10 | SUM(tk.price) AS revenue_generated,
|
|---|
| 11 | COUNT(DISTINCT tt.Traintrain_id) AS unique_trains_passed
|
|---|
| 12 | FROM Station s
|
|---|
| 13 | JOIN Ticket tk ON s.station_id = tk.Stationstation_id
|
|---|
| 14 | JOIN "Train Trip" tt ON tk."Train Triptrip_id" = tt.trip_id
|
|---|
| 15 | GROUP BY s.station_id, s.station_name, s.city;
|
|---|
| 16 |
|
|---|
| 17 | select * from station_traffic_and_revenue where station_id=14;
|
|---|
| 18 |
|
|---|
| 19 | DROP VIEW IF EXISTS station_traffic_and_revenue;
|
|---|
| 20 |
|
|---|
| 21 | CREATE MATERIALIZED VIEW station_traffic_and_revenue AS
|
|---|
| 22 | SELECT
|
|---|
| 23 | s.station_id,
|
|---|
| 24 | s.station_name,
|
|---|
| 25 | s.city,
|
|---|
| 26 | COUNT(tk.ticket_id) AS passengers_departed,
|
|---|
| 27 | SUM(tk.price) AS revenue_generated,
|
|---|
| 28 | COUNT(DISTINCT tt.Traintrain_id) AS unique_trains_passed
|
|---|
| 29 | FROM Station s
|
|---|
| 30 | JOIN Ticket tk ON s.station_id = tk.Stationstation_id
|
|---|
| 31 | JOIN "Train Trip" tt ON tk."Train Triptrip_id" = tt.trip_id
|
|---|
| 32 | GROUP BY s.station_id, s.station_name, s.city;
|
|---|
| 33 |
|
|---|
| 34 | select * from station_traffic_and_revenue where station_id=14;
|
|---|
| 35 |
|
|---|
| 36 | CREATE INDEX idx_station_traffic_sid ON station_traffic_and_revenue (station_id);
|
|---|
| 37 |
|
|---|
| 38 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 39 | SELECT * FROM station_traffic_and_revenue WHERE station_id=14;
|
|---|
| 40 |
|
|---|
| 41 | ----------------------------------------------------------------------
|
|---|
| 42 | --view_train_utilization Marija
|
|---|
| 43 |
|
|---|
| 44 | CREATE VIEW view_train_utilization AS
|
|---|
| 45 | SELECT
|
|---|
| 46 | t.train_id,
|
|---|
| 47 | t.train_number,
|
|---|
| 48 | COUNT(tt.trip_id) AS total_trips,
|
|---|
| 49 | AVG(tt.delay_minutes) AS avg_delay_minutes
|
|---|
| 50 | FROM Train t
|
|---|
| 51 | LEFT JOIN "Train Trip" tt ON t.train_id = tt.Traintrain_id
|
|---|
| 52 | GROUP BY t.train_id, t.train_number;
|
|---|
| 53 |
|
|---|
| 54 | SELECT * FROM view_train_utilization WHERE train_id = 91;
|
|---|
| 55 |
|
|---|
| 56 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 57 | SELECT * FROM view_train_utilization WHERE train_id = 91;
|
|---|
| 58 |
|
|---|
| 59 | ----------------------------------------------------------------------
|
|---|
| 60 | --view_payment_audit Marija
|
|---|
| 61 |
|
|---|
| 62 | CREATE VIEW view_payment_audit AS
|
|---|
| 63 | SELECT
|
|---|
| 64 | pm.payment_id,
|
|---|
| 65 | p.first_name || ' ' || p.last_name AS passenger_name,
|
|---|
| 66 | pm.amount AS total_paid,
|
|---|
| 67 | SUM(tk.price) AS total_ticket_value,
|
|---|
| 68 | (pm.amount - SUM(tk.price)) AS discrepancy,
|
|---|
| 69 | CASE
|
|---|
| 70 | WHEN pm.amount = SUM(tk.price) THEN 'Balanced'
|
|---|
| 71 | WHEN pm.amount > SUM(tk.price) THEN 'Overpaid'
|
|---|
| 72 | ELSE 'Underpaid'
|
|---|
| 73 | END AS audit_status
|
|---|
| 74 | FROM Payment pm
|
|---|
| 75 | JOIN Person p ON pm.PassengerPersonEMBG2 = p.EMBG
|
|---|
| 76 | JOIN Ticket tk ON pm.payment_id = tk.Paymentpayment_id
|
|---|
| 77 | GROUP BY pm.payment_id, p.first_name, p.last_name, pm.amount;
|
|---|
| 78 |
|
|---|
| 79 | SELECT * FROM view_payment_audit WHERE payment_id = 212;
|
|---|
| 80 |
|
|---|
| 81 | DROP VIEW IF EXISTS view_payment_audit;
|
|---|
| 82 |
|
|---|
| 83 | CREATE MATERIALIZED VIEW view_payment_audit AS
|
|---|
| 84 | SELECT
|
|---|
| 85 | pm.payment_id,
|
|---|
| 86 | p.first_name || ' ' || p.last_name AS passenger_name,
|
|---|
| 87 | pm.amount AS total_paid,
|
|---|
| 88 | SUM(tk.price) AS total_ticket_value,
|
|---|
| 89 | (pm.amount - SUM(tk.price)) AS discrepancy,
|
|---|
| 90 | CASE
|
|---|
| 91 | WHEN pm.amount = SUM(tk.price) THEN 'Balanced'
|
|---|
| 92 | WHEN pm.amount > SUM(tk.price) THEN 'Overpaid'
|
|---|
| 93 | ELSE 'Underpaid'
|
|---|
| 94 | END AS audit_status
|
|---|
| 95 | FROM Payment pm
|
|---|
| 96 | JOIN Person p ON pm.PassengerPersonEMBG2 = p.EMBG
|
|---|
| 97 | JOIN Ticket tk ON pm.payment_id = tk.Paymentpayment_id
|
|---|
| 98 | GROUP BY pm.payment_id, p.first_name, p.last_name, pm.amount;
|
|---|
| 99 |
|
|---|
| 100 | SELECT * FROM view_payment_audit WHERE payment_id = 212;
|
|---|
| 101 |
|
|---|
| 102 | CREATE INDEX idx_audit_payment_id ON view_payment_audit (payment_id);
|
|---|
| 103 |
|
|---|
| 104 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 105 | SELECT * FROM view_payment_audit WHERE payment_id = 212;
|
|---|
| 106 | ----------------------------------------------------------------------
|
|---|
| 107 | --view_route_passenger_summary Marija
|
|---|
| 108 |
|
|---|
| 109 | CREATE VIEW view_route_passenger_summary AS
|
|---|
| 110 | SELECT
|
|---|
| 111 | r.route_id,
|
|---|
| 112 | r.route_name,
|
|---|
| 113 | COUNT(tk.ticket_id) AS total_tickets_sold,
|
|---|
| 114 | SUM(tk.price) AS total_revenue
|
|---|
| 115 | FROM Route r
|
|---|
| 116 | LEFT JOIN "Train Trip" tt ON r.route_id = tt.Routeroute_id
|
|---|
| 117 | LEFT JOIN Ticket tk ON tt.trip_id = tk."Train Triptrip_id"
|
|---|
| 118 | GROUP BY r.route_id, r.route_name;
|
|---|
| 119 |
|
|---|
| 120 | SELECT * FROM view_route_passenger_summary WHERE route_id = 517;
|
|---|
| 121 |
|
|---|
| 122 | DROP VIEW IF EXISTS view_route_passenger_summary;
|
|---|
| 123 |
|
|---|
| 124 | CREATE MATERIALIZED VIEW view_route_passenger_summary AS
|
|---|
| 125 | SELECT
|
|---|
| 126 | r.route_id,
|
|---|
| 127 | r.route_name,
|
|---|
| 128 | COUNT(tk.ticket_id) AS total_tickets_sold,
|
|---|
| 129 | SUM(tk.price) AS total_revenue
|
|---|
| 130 | FROM Route r
|
|---|
| 131 | LEFT JOIN "Train Trip" tt ON r.route_id = tt.Routeroute_id
|
|---|
| 132 | LEFT JOIN Ticket tk ON tt.trip_id = tk."Train Triptrip_id"
|
|---|
| 133 | GROUP BY r.route_id, r.route_name;
|
|---|
| 134 |
|
|---|
| 135 | SELECT * FROM view_route_passenger_summary WHERE route_id = 517;
|
|---|
| 136 |
|
|---|
| 137 | CREATE INDEX idx_traintrip_route_id ON "Train Trip" (Routeroute_id);
|
|---|
| 138 | CREATE INDEX idx_ticket_trip_id_1 ON Ticket ("Train Triptrip_id");
|
|---|
| 139 |
|
|---|
| 140 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 141 | SELECT * FROM view_route_passenger_summary WHERE route_id = 517;
|
|---|
| 142 | ---------------------------------------------------------------------------
|
|---|
| 143 | --------------functionalView1 Nina--------------
|
|---|
| 144 |
|
|---|
| 145 | DROP VIEW IF EXISTS view_conductor_list CASCADE;
|
|---|
| 146 |
|
|---|
| 147 | CREATE VIEW view_conductor_list AS
|
|---|
| 148 | SELECT
|
|---|
| 149 | tt.trip_id,
|
|---|
| 150 | t.train_number,
|
|---|
| 151 | tk.ticket_id,
|
|---|
| 152 | tk.seat_number,
|
|---|
| 153 | tk.carriage_number,
|
|---|
| 154 | p.first_name || ' ' || p.last_name AS passenger,
|
|---|
| 155 | s1.station_name AS departure_station,
|
|---|
| 156 | s2.station_name AS arrival_station,
|
|---|
| 157 | tt.departure_time
|
|---|
| 158 | FROM Ticket tk
|
|---|
| 159 | JOIN "Train Trip" tt ON tk."Train Triptrip_id" = tt.trip_id
|
|---|
| 160 | JOIN Train t ON tt.Traintrain_id = t.train_id
|
|---|
| 161 | JOIN Payment pay ON tk.Paymentpayment_id = pay.payment_id
|
|---|
| 162 | JOIN Passenger pass ON pay.Passengerpassenger_id = pass.passenger_id
|
|---|
| 163 | AND pay.PassengerPersonEMBG2 = pass.PersonEMBG
|
|---|
| 164 | JOIN Person p ON pass.PersonEMBG = p.EMBG
|
|---|
| 165 | JOIN Station s1 ON tk.Stationstation_id = s1.station_id
|
|---|
| 166 | JOIN Station s2 ON tk.Stationstation_id2 = s2.station_id;
|
|---|
| 167 |
|
|---|
| 168 | select * from view_conductor_list where trip_id=345895;
|
|---|
| 169 |
|
|---|
| 170 | CREATE INDEX idx_ticket_trip_id ON Ticket ("Train Triptrip_id");
|
|---|
| 171 |
|
|---|
| 172 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 173 | SELECT * FROM view_conductor_list WHERE trip_id = 345895;
|
|---|
| 174 |
|
|---|
| 175 | SELECT * FROM view_conductor_list LIMIT 10;
|
|---|
| 176 | ----------------------------------------------------------------
|
|---|
| 177 |
|
|---|
| 178 | ----------functionalView2 Nina----------------
|
|---|
| 179 |
|
|---|
| 180 | CREATE VIEW view_user_ticket_history AS
|
|---|
| 181 | SELECT
|
|---|
| 182 | pass.passenger_id,
|
|---|
| 183 | p.first_name || ' ' || p.last_name AS passenger_name,
|
|---|
| 184 | tk.ticket_id,
|
|---|
| 185 | tt.departure_time,
|
|---|
| 186 | r.route_name,
|
|---|
| 187 | tk.ticket_status,
|
|---|
| 188 | CASE
|
|---|
| 189 | WHEN tt.departure_time >= CURRENT_DATE THEN 'Upcoming'
|
|---|
| 190 | ELSE 'Past'
|
|---|
| 191 | END AS travel_period
|
|---|
| 192 | FROM Ticket tk
|
|---|
| 193 | JOIN "Train Trip" tt ON tk."Train Triptrip_id" = tt.trip_id
|
|---|
| 194 | JOIN Route r ON tt.Routeroute_id = r.route_id
|
|---|
| 195 | JOIN Payment pay ON tk.Paymentpayment_id = pay.payment_id
|
|---|
| 196 | JOIN Passenger pass ON pay.Passengerpassenger_id = pass.passenger_id
|
|---|
| 197 | JOIN Person p ON pass.PersonEMBG = p.EMBG;
|
|---|
| 198 |
|
|---|
| 199 |
|
|---|
| 200 | select * from view_user_ticket_history where passenger_id=689371;
|
|---|
| 201 |
|
|---|
| 202 | CREATE INDEX idx_ticket_payment_id ON Ticket (Paymentpayment_id);
|
|---|
| 203 | CREATE INDEX idx_payment_passenger_id ON Payment (Passengerpassenger_id);
|
|---|
| 204 |
|
|---|
| 205 |
|
|---|
| 206 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 207 | select * from view_user_ticket_history where passenger_id=689371;
|
|---|
| 208 |
|
|---|
| 209 | -------------------------------------------------------------------------
|
|---|
| 210 | ------Functional view 3 Nina----
|
|---|
| 211 |
|
|---|
| 212 | CREATE VIEW view_station_departures AS
|
|---|
| 213 | SELECT s.station_id, s.station_name,tt.trip_id,r.route_name, tt.departure_time, tt.trip_status, tt.delay_minutes
|
|---|
| 214 | FROM "Train Trip" tt
|
|---|
| 215 | JOIN Route r ON tt.Routeroute_id = r.route_id
|
|---|
| 216 | JOIN Platform pl ON tt.PlatformStationstation_id = pl.Stationstation_id AND tt.Platformplatform_id = pl.platform_id
|
|---|
| 217 | JOIN Station s ON pl.Stationstation_id = s.station_id
|
|---|
| 218 | WHERE tt.departure_time >= CURRENT_DATE
|
|---|
| 219 | ORDER BY tt.departure_time ASC;
|
|---|
| 220 |
|
|---|
| 221 | select * from view_station_departures where trip_id=47138;
|
|---|
| 222 |
|
|---|
| 223 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 224 | select * from view_user_ticket_history where passenger_id=689371;
|
|---|
| 225 |
|
|---|
| 226 | ---------------------------------------------------------------------------
|
|---|
| 227 | ------Functional view 4 Nina----------------
|
|---|
| 228 |
|
|---|
| 229 | CREATE VIEW view_station_arrivals AS
|
|---|
| 230 | SELECT s.station_id, s.station_name, tt.trip_id,r.route_name, tt.arrival_time, tt.trip_status, tt.delay_minutes
|
|---|
| 231 | FROM "Train Trip" tt
|
|---|
| 232 | JOIN Route r ON tt.Routeroute_id = r.route_id
|
|---|
| 233 | JOIN Platform pl ON tt.PlatformStationstation_id = pl.Stationstation_id AND tt.Platformplatform_id = pl.platform_id
|
|---|
| 234 | JOIN Station s ON pl.Stationstation_id = s.station_id
|
|---|
| 235 | WHERE tt.arrival_time >= CURRENT_DATE
|
|---|
| 236 | ORDER BY tt.arrival_time ASC;
|
|---|
| 237 |
|
|---|
| 238 | select * from view_station_arrivals where trip_id=146474;
|
|---|
| 239 |
|
|---|
| 240 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 241 | select * from view_station_arrivals where trip_id=146474;
|
|---|
| 242 |
|
|---|
| 243 | -----------------------------------------------------------------------
|
|---|
| 244 | --view_route_infrastructure_stats Nina
|
|---|
| 245 |
|
|---|
| 246 | CREATE VIEW view_route_infrastructure_stats AS
|
|---|
| 247 | SELECT
|
|---|
| 248 | r.route_name,
|
|---|
| 249 | COUNT(rs.Segmentsegment_id) AS total_segments,
|
|---|
| 250 | SUM(seg.length_km) AS total_route_length_km,
|
|---|
| 251 | MIN(seg.max_speed) AS bottleneck_speed,
|
|---|
| 252 | AVG(seg.max_speed) AS average_speed_limit
|
|---|
| 253 | FROM Route r
|
|---|
| 254 | JOIN Route_Segment rs ON r.route_id = rs.Routeroute_id
|
|---|
| 255 | JOIN Segment seg ON rs.Segmentsegment_id = seg.segment_id
|
|---|
| 256 | GROUP BY r.route_id, r.route_name;
|
|---|
| 257 |
|
|---|
| 258 | SELECT
|
|---|
| 259 | route_name,
|
|---|
| 260 | total_segments,
|
|---|
| 261 | total_route_length_km
|
|---|
| 262 | FROM view_route_infrastructure_stats
|
|---|
| 263 | ORDER BY total_route_length_km DESC
|
|---|
| 264 | LIMIT 10;
|
|---|
| 265 |
|
|---|
| 266 | select * from view_route_infrastructure_stats where route_name='Venice - Bari';
|
|---|
| 267 |
|
|---|
| 268 | ---------------------------------------------------
|
|---|
| 269 | --view_trip_performance Ana
|
|---|
| 270 |
|
|---|
| 271 | CREATE VIEW view_trip_performance AS
|
|---|
| 272 | SELECT
|
|---|
| 273 | tt.trip_id,
|
|---|
| 274 | r.route_name,
|
|---|
| 275 | t.train_number,
|
|---|
| 276 | p.first_name || ' ' || p.last_name AS driver_name,
|
|---|
| 277 | tt.departure_time,
|
|---|
| 278 | tt.arrival_time,
|
|---|
| 279 | tt.delay_minutes,
|
|---|
| 280 | CASE
|
|---|
| 281 | WHEN tt.delay_minutes = 0 THEN 'On Time'
|
|---|
| 282 | WHEN tt.delay_minutes <= 15 THEN 'Slight Delay'
|
|---|
| 283 | ELSE 'Significant Delay'
|
|---|
| 284 | END AS delay_status
|
|---|
| 285 | FROM "Train Trip" tt
|
|---|
| 286 | JOIN Route r ON tt.Routeroute_id = r.route_id
|
|---|
| 287 | JOIN Train t ON tt.Traintrain_id = t.train_id
|
|---|
| 288 | JOIN Employee e ON tt.EmployeePersonEMBG2 = e.PersonEMBG AND tt.Employeeemployee_id = e.employee_id
|
|---|
| 289 | JOIN Person p ON e.PersonEMBG = p.EMBG;
|
|---|
| 290 |
|
|---|
| 291 | SELECT trip_id,
|
|---|
| 292 | delay_minutes,
|
|---|
| 293 | delay_status
|
|---|
| 294 | FROM view_trip_performance
|
|---|
| 295 | WHERE delay_minutes > 0
|
|---|
| 296 | LIMIT 10;
|
|---|
| 297 |
|
|---|
| 298 | SELECT
|
|---|
| 299 | v.trip_id,
|
|---|
| 300 | v.route_name,
|
|---|
| 301 | v.delay_status,
|
|---|
| 302 | COUNT(tk.ticket_id) AS total_passengers
|
|---|
| 303 | FROM view_trip_performance v
|
|---|
| 304 | LEFT JOIN Ticket tk ON v.trip_id = tk."Train Triptrip_id"
|
|---|
| 305 | GROUP BY v.trip_id, v.route_name, v.delay_status
|
|---|
| 306 | ORDER BY total_passengers DESC
|
|---|
| 307 | limit 10;
|
|---|
| 308 |
|
|---|
| 309 | select * from view_trip_performance where trip_id=6789;
|
|---|
| 310 | EXPLAIN (ANALYZE , COSTS OFF , TIMING On, SUMMARY ON)
|
|---|
| 311 | select * from view_trip_performance where trip_id=6789;
|
|---|
| 312 |
|
|---|
| 313 | -----------------------------------------------------------------
|
|---|
| 314 | --active_delays Ana
|
|---|
| 315 |
|
|---|
| 316 | CREATE VIEW active_delays AS
|
|---|
| 317 | SELECT
|
|---|
| 318 | tt.trip_id,
|
|---|
| 319 | r.route_name,
|
|---|
| 320 | t.train_number,
|
|---|
| 321 | tt.departure_time,
|
|---|
| 322 | tt.delay_minutes,
|
|---|
| 323 | s.station_name AS current_stop
|
|---|
| 324 | FROM "Train Trip" tt
|
|---|
| 325 | JOIN Route r ON tt.Routeroute_id = r.route_id
|
|---|
| 326 | JOIN Train t ON tt.Traintrain_id = t.train_id
|
|---|
| 327 | JOIN Station s ON tt.PlatformStationstation_id = s.station_id
|
|---|
| 328 | WHERE tt.delay_minutes > 0 AND tt.trip_status != 'Completed';
|
|---|
| 329 |
|
|---|
| 330 | select * from active_delays where trip_id=30275;
|
|---|
| 331 | EXPLAIN (ANALYZE , COSTS OFF , TIMING On, SUMMARY ON)
|
|---|
| 332 | select * from active_delays where trip_id=30275;
|
|---|
| 333 |
|
|---|
| 334 | ----------------------------------------------------------
|
|---|
| 335 | --train_maintenance_stats Ana
|
|---|
| 336 |
|
|---|
| 337 | CREATE VIEW train_maintenance_stats AS
|
|---|
| 338 | SELECT
|
|---|
| 339 | t.train_id,
|
|---|
| 340 | t.train_number,
|
|---|
| 341 | COUNT(DISTINCT tum.maintenancemaintenance_id) AS total_services,
|
|---|
| 342 | COUNT(DISTINCT epm.employeeemployee_id) AS total_technicians_involved
|
|---|
| 343 | FROM Train t
|
|---|
| 344 | LEFT JOIN train_undergoes_maintenance tum ON t.train_id = tum.traintrain_id
|
|---|
| 345 | LEFT JOIN employee_performs_maintenance epm ON tum.maintenancemaintenance_id = epm.maintenancemaintenance_id
|
|---|
| 346 | GROUP BY t.train_id, t.train_number;
|
|---|
| 347 |
|
|---|
| 348 | select * from train_maintenance_stats where train_id=940;
|
|---|
| 349 | CREATE INDEX ind_train_maintenance
|
|---|
| 350 | ON employee_performs_maintenance(maintenancemaintenance_id);
|
|---|
| 351 | EXPLAIN (ANALYZE , COSTS OFF , TIMING On, SUMMARY ON)
|
|---|
| 352 | select * from train_maintenance_stats where train_id=940;
|
|---|
| 353 | -------------------------------------------------------------
|
|---|
| 354 | --route_trip_stats Ana
|
|---|
| 355 |
|
|---|
| 356 | CREATE VIEW route_trip_stats AS
|
|---|
| 357 | SELECT
|
|---|
| 358 | r.route_id,
|
|---|
| 359 | r.route_name,
|
|---|
| 360 | COUNT(tt.trip_id) AS total_trips,
|
|---|
| 361 | AVG(tt.delay_minutes) AS avg_delay
|
|---|
| 362 | FROM Route r
|
|---|
| 363 | LEFT JOIN "Train Trip" tt ON tt.Routeroute_id = r.route_id
|
|---|
| 364 | GROUP BY r.route_id, r.route_name;
|
|---|
| 365 |
|
|---|
| 366 | select * from route_trip_stats where route_id=489;
|
|---|
| 367 | EXPLAIN (ANALYZE , COSTS OFF , TIMING On, SUMMARY ON)
|
|---|
| 368 | select * from route_trip_stats where route_id=489;
|
|---|
| 369 | ----------------------------------------------------------------------
|
|---|
| 370 | CREATE OR REPLACE VIEW vw_free_seats_per_trip AS
|
|---|
| 371 | SELECT
|
|---|
| 372 | tt.trip_id,
|
|---|
| 373 | COALESCE(t.capacity, 0) AS total_capacity,
|
|---|
| 374 | COUNT(tk.ticket_id) AS sold_tickets,
|
|---|
| 375 | (COALESCE(t.capacity, 0) - COUNT(tk.ticket_id)) AS free_seats
|
|---|
| 376 | FROM "Train Trip" tt
|
|---|
| 377 | JOIN Train t
|
|---|
| 378 | ON tt.Traintrain_id = t.train_id
|
|---|
| 379 | LEFT JOIN Ticket tk
|
|---|
| 380 | ON tt.trip_id = tk."Train Triptrip_id"
|
|---|
| 381 | GROUP BY tt.trip_id, t.capacity;
|
|---|
| 382 |
|
|---|
| 383 | SELECT * FROM vw_free_seats_per_trip;
|
|---|
| 384 |
|
|---|
| 385 | SELECT free_seats FROM vw_free_seats_per_trip WHERE trip_id = 155;
|
|---|
| 386 |
|
|---|
| 387 |
|
|---|
| 388 | EXPLAIN (ANALYZE, COSTS OFF, TIMING ON, SUMMARY ON)
|
|---|
| 389 | SELECT free_seats FROM vw_free_seats_per_trip WHERE trip_id = 155;
|
|---|
| 390 |
|
|---|
| 391 | -----------------------------------------------------------
|
|---|
| 392 | INDEX DROP
|
|---|
| 393 |
|
|---|
| 394 | drop index idx_station_traffic_sid;
|
|---|
| 395 | drop index idx_traintrip_route_id;
|
|---|
| 396 | drop index idx_ticket_trip_id_1;
|
|---|
| 397 | drop index idx_audit_payment_id;
|
|---|