DMLiDDL: Pogledi.sql

File Pogledi.sql, 7.5 KB (added by 231004, 4 days ago)
Line 
1CREATE OR REPLACE VIEW car_dealership.EmployeePerformanceView AS
2SELECT e.id,
3 (e.first_name || ' ' || e.last_name) AS name,
4 e.position,
5 COUNT(s.id) AS "number of sold cars",
6 SUM(p.amount) AS revenue,
7 ROUND(AVG(p.amount), 2) AS "avg sale value"
8FROM car_dealership.employee e
9 INNER JOIN car_dealership.sale s
10 ON e.id = s.employee_id
11 INNER JOIN car_dealership.payment p
12 ON s.id = p.sale_id
13GROUP BY e.id, e.first_name, e.last_name, e.position;
14
15
16CREATE MATERIALIZED VIEW car_dealership.BrandPopularityView AS
17SELECT b.brand,
18 COUNT(s.id) AS total_sales
19FROM car_dealership.sale s
20 JOIN car_dealership.contract c ON s.contract_id = c.id
21 JOIN car_dealership.vehicle v ON c.vin = v.vin
22 JOIN car_dealership.model m ON v.model_id = m.id
23 JOIN car_dealership.brand b ON m.brand_id = b.id
24GROUP BY b.brand;
25
26CREATE OR REPLACE VIEW car_dealership.CustomerValueView AS
27SELECT c.id,
28 (c.first_name || ' ' || c.last_name) AS name,
29 COUNT(s.id) AS "total purchases",
30 COALESCE(SUM(p.amount), 0) AS "total spent",
31 COALESCE(AVG(p.amount), 0) AS "avg purchase value",
32 MAX(s.date) AS "last purchase date"
33FROM car_dealership.customer c
34 INNER JOIN car_dealership.sale s ON c.id = s.customer_id
35 INNER JOIN car_dealership.payment p ON s.id = p.sale_id
36WHERE s.date >= CURRENT_DATE - INTERVAL '2 years'
37GROUP BY c.id, c.first_name, c.last_name;
38
39CREATE OR REPLACE VIEW car_dealership.VehiclesInStockView AS
40SELECT v.vin,
41 (b.brand || ' - ' || m.model) AS model,
42 m.year AS year,
43 v.color,
44 v.price,
45 vt.type AS "vehicle type",
46 f.name AS factory
47FROM car_dealership.vehicle v
48 JOIN car_dealership.model m ON m.id = v.model_id
49 JOIN car_dealership.brand b ON b.id = m.brand_id
50 JOIN car_dealership.vehicletype vt ON vt.id = v.vehicle_type_id
51 JOIN car_dealership.status st ON st.id = v.status_id
52 LEFT JOIN car_dealership.production p ON p.vin = v.vin
53 LEFT JOIN car_dealership.factory f ON f.id = p.factory_id
54WHERE st.status = 'In Stock';
55select * from car_dealership.VehiclesInStockView;
56
57CREATE OR REPLACE VIEW car_dealership.MonthlySalesView AS
58SELECT EXTRACT(YEAR FROM s.date)::integer AS year,
59 EXTRACT(MONTH FROM s.date)::integer AS month,
60 COUNT(s.id) AS "total sales",
61 SUM(p.amount) AS "total revenue",
62 AVG(p.amount) AS "avg sale value",
63 COUNT(DISTINCT s.customer_id) AS "unique customers"
64FROM car_dealership.sale s
65 INNER JOIN car_dealership.payment p ON s.id = p.sale_id
66WHERE s.date >= DATE_TRUNC('year', CURRENT_DATE) - INTERVAL '2 years'
67GROUP BY EXTRACT(YEAR FROM s.date), EXTRACT(MONTH FROM s.date);
68
69
70-- View created in 46ms
71-- Fetched data in 13s
72CREATE MATERIALIZED VIEW car_dealership.PopularConfigurationsView AS
73SELECT ep.id AS package_id,
74 ep.name AS "package name",
75 ep.price,
76 COUNT(cp.id) AS "times selected",
77 et.name AS "equipment type"
78FROM car_dealership.equipmentpackage ep
79 JOIN car_dealership.configurationpackage cp ON ep.id = cp.package_id
80 JOIN car_dealership.equipmenttype et ON ep.equipment_type_id = et.id
81GROUP BY ep.id, ep.name, ep.price, et.name;
82
83DROP VIEW IF EXISTS car_dealership.RecentTestDrivesView;
84-- View created in 29ms
85-- Fetched data in 3s
86CREATE OR REPLACE VIEW car_dealership.RecentTestDrivesView AS
87SELECT td.id AS test_drive_id,
88 c.id AS customer_id,
89 c.first_name || ' ' || c.last_name AS customer_name,
90 c.phone,
91 b.brand,
92 m.model,
93 v.vin,
94 td.date,
95 td.time_start,
96 td.time_end,
97 td.result
98FROM car_dealership.testdrive td
99 JOIN car_dealership.customer c ON c.id = td.customer_id
100 JOIN car_dealership.vehicle v ON v.vin = td.vin
101 JOIN car_dealership.model m ON m.id = v.model_id
102 JOIN car_dealership.brand b ON b.id = m.brand_id
103WHERE td.date >= CURRENT_DATE - INTERVAL '90 days';
104
105
106DROP VIEW IF EXISTS car_dealership.PendingOrdersView;
107-- View created in 28ms
108-- Fetched data in 2s 369ms
109CREATE OR REPLACE VIEW car_dealership.PendingOrdersView AS
110SELECT o.id AS order_id,
111 o.customer_id,
112 o.date AS order_date,
113 c.first_name || ' ' || c.last_name AS customer_name,
114 c.phone,
115 c.email,
116 e.first_name || ' ' || e.last_name AS employee_name,
117 b.brand,
118 m.model,
119 v.vin,
120 f.name AS factory
121FROM car_dealership."Order" o
122 JOIN car_dealership.customer c ON o.customer_id = c.id
123 JOIN car_dealership.employee e ON o.employee_id = e.id
124 JOIN car_dealership.configuration conf ON o.configuration_id = conf.id
125 JOIN car_dealership.vehicle v ON conf.vin = v.vin
126 JOIN car_dealership.model m ON v.model_id = m.id
127 JOIN car_dealership.brand b ON m.brand_id = b.id
128 LEFT JOIN car_dealership.production p ON p.vin = v.vin
129 LEFT JOIN car_dealership.factory f ON f.id = p.factory_id
130WHERE o.status = 'Pending';
131
132
133CREATE MATERIALIZED VIEW car_dealership.AvailableVehiclesByBudgetView AS
134SELECT v.vin,
135 b.brand,
136 m.model,
137 m.year AS model_year,
138 vt.type AS vehicle_type,
139 v.color,
140 v.price,
141 CASE
142 WHEN v.price < 15000 THEN 'Budget'
143 WHEN v.price < 30000 THEN 'Mid-Range'
144 WHEN v.price < 55000 THEN 'Premium'
145 WHEN v.price < 90000 THEN 'Luxury'
146 ELSE 'Ultra-Luxury'
147 END AS budget_tier,
148 CASE
149 WHEN v.price < 15000 THEN 1
150 WHEN v.price < 30000 THEN 2
151 WHEN v.price < 55000 THEN 3
152 WHEN v.price < 90000 THEN 4
153 ELSE 5
154 END AS tier_sort_order
155FROM car_dealership.vehicle v
156 JOIN car_dealership.model m ON m.id = v.model_id
157 JOIN car_dealership.brand b ON b.id = m.brand_id
158 JOIN car_dealership.vehicletype vt ON vt.id = v.vehicle_type_id
159 JOIN car_dealership.status st ON st.id = v.status_id
160WHERE st.status = 'In Stock';
161
162-- drop materialized view if exists car_dealership.NewArrivalsView;
163-- CREATE MATERIALIZED VIEW car_dealership.NewArrivalsView AS
164-- SELECT v.vin,
165-- b.brand,
166-- m.model,
167-- m.year AS model_year,
168-- vt.type AS vehicle_type,
169-- v.color,
170-- v.price,
171-- cfg.created_at AS listed_since,
172-- f.name AS factory
173-- FROM car_dealership.vehicle v
174-- JOIN car_dealership.model m ON m.id = v.model_id
175-- JOIN car_dealership.brand b ON b.id = m.brand_id
176-- JOIN car_dealership.vehicletype vt ON vt.id = v.vehicle_type_id
177-- JOIN car_dealership.status st ON st.id = v.status_id
178-- JOIN car_dealership.configuration cfg ON cfg.vin = v.vin
179-- LEFT JOIN car_dealership.production p ON p.vin = v.vin
180-- LEFT JOIN car_dealership.factory f ON f.id = p.factory_id
181-- WHERE st.status = 'In Stock'
182-- AND cfg.created_at >= CURRENT_DATE - INTERVAL '30 days';