| 1 | -- Потрошувачка на гориво
|
|---|
| 2 | CREATE MATERIALIZED VIEW MV_FUEL_CONSUMPTION AS
|
|---|
| 3 | SELECT
|
|---|
| 4 | v.VEHICLE_ID,
|
|---|
| 5 | v.REGISTRATION_NUMBER,
|
|---|
| 6 | vt.TYPE_NAME AS VEHICLE_TYPE,
|
|---|
| 7 | v.STATUS AS VEHICLE_STATUS,
|
|---|
| 8 | COUNT(fl.FUEL_LOG_ID) AS TOTAL_REFUELS,
|
|---|
| 9 | SUM(fl.FUEL_AMOUNT) AS TOTAL_FUEL_L,
|
|---|
| 10 | AVG(fl.FUEL_AMOUNT) AS AVG_FUEL_PER_REFUEL_L,
|
|---|
| 11 | SUM(fl.FUEL_COST) AS TOTAL_FUEL_COST,
|
|---|
| 12 | AVG(fl.FUEL_COST) AS AVG_FUEL_COST,
|
|---|
| 13 | MAX(fl.FUEL_DATE) AS LAST_REFUEL_DATE,
|
|---|
| 14 | SUM(CASE
|
|---|
| 15 | WHEN fl.FUEL_DATE >= CURRENT_DATE - INTERVAL '30 days'
|
|---|
| 16 | THEN fl.FUEL_AMOUNT ELSE 0
|
|---|
| 17 | END) AS FUEL_L_LAST_30_DAYS,
|
|---|
| 18 | SUM(CASE
|
|---|
| 19 | WHEN fl.FUEL_DATE >= CURRENT_DATE - INTERVAL '30 days'
|
|---|
| 20 | THEN fl.FUEL_COST ELSE 0
|
|---|
| 21 | END) AS COST_LAST_30_DAYS
|
|---|
| 22 | FROM VEHICLE v
|
|---|
| 23 | LEFT JOIN FUEL_LOG fl ON v.VEHICLE_ID = fl.VEHICLE_ID
|
|---|
| 24 | LEFT JOIN VEHICLE_TYPE vt ON v.VEHICLE_TYPE_ID = vt.VEHICLE_TYPE_ID
|
|---|
| 25 | GROUP BY v.VEHICLE_ID, v.REGISTRATION_NUMBER,
|
|---|
| 26 | vt.TYPE_NAME, v.STATUS;
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 | -- Complaints по патник
|
|---|
| 30 | CREATE MATERIALIZED VIEW MV_PASSENGER_COMPLAINTS AS
|
|---|
| 31 | SELECT
|
|---|
| 32 | p.PASSENGER_ID,
|
|---|
| 33 | p.FIRST_NAME || ' ' || p.LAST_NAME AS PASSENGER_NAME,
|
|---|
| 34 | COUNT(c.COMPLAINT_ID) AS TOTAL_COMPLAINTS,
|
|---|
| 35 | MAX(c.COMPLAINT_DATE) AS LAST_COMPLAINT_DATE
|
|---|
| 36 | FROM PASSENGER p
|
|---|
| 37 | LEFT JOIN COMPLAINT c ON p.PASSENGER_ID = c.PASSENGER_ID
|
|---|
| 38 | GROUP BY p.PASSENGER_ID, p.FIRST_NAME, p.LAST_NAME;
|
|---|
| 39 |
|
|---|
| 40 |
|
|---|
| 41 | -- Финансиски извештај по линија
|
|---|
| 42 | CREATE MATERIALIZED VIEW MV_REVENUE_BY_ROUTE AS
|
|---|
| 43 | SELECT
|
|---|
| 44 | r.ROUTE_ID,
|
|---|
| 45 | r.ROUTE_NAME,
|
|---|
| 46 | a.AGENCY_NAME,
|
|---|
| 47 | COUNT(DISTINCT t.TRIP_ID) AS TOTAL_TRIPS,
|
|---|
| 48 | COUNT(tk.TICKET_ID) AS TICKETS_SOLD,
|
|---|
| 49 | SUM(tk.PRICE) AS GROSS_REVENUE,
|
|---|
| 50 | SUM(CASE WHEN pay.PAYMENT_STATUS = 'COMPLETED'
|
|---|
| 51 | THEN pay.AMOUNT ELSE 0 END) AS COLLECTED_REVENUE,
|
|---|
| 52 | AVG(tk.PRICE) AS AVG_TICKET_PRICE
|
|---|
| 53 | FROM ROUTE r
|
|---|
| 54 | JOIN AGENCY a ON r.AGENCY_ID = a.AGENCY_ID
|
|---|
| 55 | JOIN TRIP t ON r.ROUTE_ID = t.ROUTE_ID
|
|---|
| 56 | JOIN TICKET tk ON t.TRIP_ID = tk.TRIP_ID
|
|---|
| 57 | LEFT JOIN PAYMENT pay ON tk.TICKET_ID = pay.TICKET_ID
|
|---|
| 58 | WHERE tk.STATUS NOT IN ('CANCELLED', 'REFUNDED')
|
|---|
| 59 | GROUP BY r.ROUTE_ID, r.ROUTE_NAME, a.AGENCY_NAME;
|
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 | -- Доцнења по trip
|
|---|
| 63 | CREATE MATERIALIZED VIEW MV_TRIP_DELAYS AS
|
|---|
| 64 | SELECT
|
|---|
| 65 | t.TRIP_ID,
|
|---|
| 66 | t.TRIP_DATE,
|
|---|
| 67 | r.ROUTE_NAME,
|
|---|
| 68 | v.REGISTRATION_NUMBER,
|
|---|
| 69 | e.FIRST_NAME || ' ' || e.LAST_NAME AS DRIVER_NAME,
|
|---|
| 70 | COUNT(dl.DELAY_ID) AS TOTAL_DELAY_RECORDS,
|
|---|
| 71 | SUM(dl.DELAY_MINUTES) AS TOTAL_DELAY_MINUTES,
|
|---|
| 72 | AVG(dl.DELAY_MINUTES) AS AVG_DELAY_MINUTES,
|
|---|
| 73 | MAX(dl.DELAY_MINUTES) AS MAX_DELAY_MINUTES,
|
|---|
| 74 | STRING_AGG(DISTINCT dl.DELAY_REASON, '; ') AS DELAY_REASONS
|
|---|
| 75 | FROM TRIP t
|
|---|
| 76 | JOIN ROUTE r ON t.ROUTE_ID = r.ROUTE_ID
|
|---|
| 77 | JOIN VEHICLE v ON t.VEHICLE_ID = v.VEHICLE_ID
|
|---|
| 78 | JOIN DRIVER dr ON t.DRIVER_ID = dr.DRIVER_ID
|
|---|
| 79 | JOIN EMPLOYEE e ON dr.EMPLOYEE_ID = e.EMPLOYEE_ID
|
|---|
| 80 | JOIN DELAY_LOG dl ON t.TRIP_ID = dl.TRIP_ID
|
|---|
| 81 | GROUP BY t.TRIP_ID, t.TRIP_DATE, r.ROUTE_NAME,
|
|---|
| 82 | v.REGISTRATION_NUMBER, e.FIRST_NAME, e.LAST_NAME;
|
|---|
| 83 |
|
|---|
| 84 |
|
|---|
| 85 | -- Патници по возило
|
|---|
| 86 | CREATE MATERIALIZED VIEW MV_VEHICLE_OCCUPANCY_STATS AS
|
|---|
| 87 | SELECT
|
|---|
| 88 | v.VEHICLE_ID,
|
|---|
| 89 | v.REGISTRATION_NUMBER,
|
|---|
| 90 | AVG(cl.PASSENGER_COUNT) AS AVG_PASSENGERS,
|
|---|
| 91 | MAX(cl.PASSENGER_COUNT) AS MAX_PASSENGERS,
|
|---|
| 92 | COUNT(cl.CAPACITY_LOG_ID) AS RECORDS
|
|---|
| 93 | FROM VEHICLE v
|
|---|
| 94 | JOIN CAPACITY_LOG cl ON v.VEHICLE_ID = cl.VEHICLE_ID
|
|---|
| 95 | GROUP BY v.VEHICLE_ID, v.REGISTRATION_NUMBER;
|
|---|