DatabaseProgramming: MaterializedViews.sql

File MaterializedViews.sql, 3.6 KB (added by 231151, 3 weeks ago)
Line 
1-- Потрошувачка на гориво
2CREATE MATERIALIZED VIEW MV_FUEL_CONSUMPTION AS
3SELECT
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
22FROM VEHICLE v
23LEFT JOIN FUEL_LOG fl ON v.VEHICLE_ID = fl.VEHICLE_ID
24LEFT JOIN VEHICLE_TYPE vt ON v.VEHICLE_TYPE_ID = vt.VEHICLE_TYPE_ID
25GROUP BY v.VEHICLE_ID, v.REGISTRATION_NUMBER,
26 vt.TYPE_NAME, v.STATUS;
27
28
29-- Complaints по патник
30CREATE MATERIALIZED VIEW MV_PASSENGER_COMPLAINTS AS
31SELECT
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
36FROM PASSENGER p
37LEFT JOIN COMPLAINT c ON p.PASSENGER_ID = c.PASSENGER_ID
38GROUP BY p.PASSENGER_ID, p.FIRST_NAME, p.LAST_NAME;
39
40
41-- Финансиски извештај по линија
42CREATE MATERIALIZED VIEW MV_REVENUE_BY_ROUTE AS
43SELECT
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
53FROM ROUTE r
54JOIN AGENCY a ON r.AGENCY_ID = a.AGENCY_ID
55JOIN TRIP t ON r.ROUTE_ID = t.ROUTE_ID
56JOIN TICKET tk ON t.TRIP_ID = tk.TRIP_ID
57LEFT JOIN PAYMENT pay ON tk.TICKET_ID = pay.TICKET_ID
58WHERE tk.STATUS NOT IN ('CANCELLED', 'REFUNDED')
59GROUP BY r.ROUTE_ID, r.ROUTE_NAME, a.AGENCY_NAME;
60
61
62-- Доцнења по trip
63CREATE MATERIALIZED VIEW MV_TRIP_DELAYS AS
64SELECT
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
75FROM TRIP t
76JOIN ROUTE r ON t.ROUTE_ID = r.ROUTE_ID
77JOIN VEHICLE v ON t.VEHICLE_ID = v.VEHICLE_ID
78JOIN DRIVER dr ON t.DRIVER_ID = dr.DRIVER_ID
79JOIN EMPLOYEE e ON dr.EMPLOYEE_ID = e.EMPLOYEE_ID
80JOIN DELAY_LOG dl ON t.TRIP_ID = dl.TRIP_ID
81GROUP BY t.TRIP_ID, t.TRIP_DATE, r.ROUTE_NAME,
82 v.REGISTRATION_NUMBER, e.FIRST_NAME, e.LAST_NAME;
83
84
85-- Патници по возило
86CREATE MATERIALIZED VIEW MV_VEHICLE_OCCUPANCY_STATS AS
87SELECT
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
93FROM VEHICLE v
94JOIN CAPACITY_LOG cl ON v.VEHICLE_ID = cl.VEHICLE_ID
95GROUP BY v.VEHICLE_ID, v.REGISTRATION_NUMBER;