45 | | WITH company_performance AS ( |
46 | | SELECT |
47 | | to_org.company_name, |
48 | | COUNT(DISTINCT r.route_id) as routes_operated, |
49 | | COUNT(DISTINCT t.trip_id) as trips_organized, |
50 | | COUNT(tk.ticket_id) as total_tickets_sold, |
51 | | SUM(COALESCE(tk.price, 0)) as total_revenue, |
52 | | AVG(COALESCE(tk.price, 0)) as avg_ticket_price, |
53 | | COUNT(DISTINCT tk.account_id) as unique_customers, |
54 | | AVG(COALESCE(rev.rating, 0)) as avg_rating |
55 | | FROM transport_organizer to_org |
56 | | JOIN route r ON to_org.transport_organizer_id = r.transport_organizer_id |
57 | | JOIN trip t ON r.route_id = t.route_id |
58 | | LEFT JOIN ticket tk ON t.trip_id = tk.trip_id |
59 | | LEFT JOIN review rev ON tk.ticket_id = rev.ticket_id |
60 | | GROUP BY to_org.transport_organizer_id, to_org.company_name |
61 | | ) |
62 | | SELECT |
63 | | company_name, |
64 | | routes_operated, |
65 | | trips_organized, |
66 | | total_tickets_sold, |
67 | | total_revenue, |
68 | | avg_ticket_price, |
69 | | unique_customers, |
70 | | ROUND(avg_rating, 2) as avg_rating |
71 | | FROM company_performance |
| 45 | |
| 46 | CREATE VIEW company_performance_view AS |
| 47 | SELECT |
| 48 | to_org.company_name, |
| 49 | COUNT(DISTINCT r.route_id) AS routes_operated, |
| 50 | COUNT(DISTINCT t.trip_id) AS trips_organized, |
| 51 | COUNT(tk.ticket_id) AS total_tickets_sold, |
| 52 | SUM(COALESCE(p.total_price, 0))::double precision AS total_revenue, |
| 53 | AVG(COALESCE(tk.price, 0))::double precision AS avg_ticket_price, |
| 54 | COUNT(DISTINCT tk.account_id) AS unique_customers, |
| 55 | ROUND(AVG(rev.rating)::numeric, 2)::double precision AS avg_rating |
| 56 | FROM transport_organizer to_org |
| 57 | JOIN route r ON to_org.transport_organizer_id = r.transport_organizer_id |
| 58 | JOIN trip t ON r.route_id = t.route_id |
| 59 | LEFT JOIN ticket tk ON t.trip_id = tk.trip_id |
| 60 | LEFT JOIN review rev ON tk.ticket_id = rev.ticket_id |
| 61 | JOIN payment p ON tk.payment_id = p.payment_id |
| 62 | GROUP BY to_org.transport_organizer_id, to_org.company_name |
194 | | JOIN trip tr ON r.route_id = tr.route_id |
195 | | JOIN ticket tk ON tr.trip_id = tk.trip_id |
196 | | JOIN payment p ON tk.payment_id = p.payment_id |
197 | | WHERE r.transport_organizer_id = 100 -- just for reference |
198 | | GROUP BY r.route_id, r.from_location_id, r.to_location_id |
199 | | ) |
| 189 | JOIN transport_organizer to_org |
| 190 | ON r.transport_organizer_id = to_org.transport_organizer_id |
| 191 | JOIN location from_loc |
| 192 | ON r.from_location_id = from_loc.location_id |
| 193 | JOIN location to_loc |
| 194 | ON r.to_location_id = to_loc.location_id |
| 195 | JOIN trip tr ON r.route_id = tr.route_id |
| 196 | JOIN ticket tk ON tr.trip_id = tk.trip_id |
| 197 | JOIN payment p ON tk.payment_id = p.payment_id |
| 198 | GROUP BY r.route_id, from_loc.name, to_loc.name, to_org.company_name |
| 199 | ), |
| 200 | max_tickets AS ( |
| 201 | SELECT MAX(total_tickets_sold) AS max_sold |
| 202 | FROM route_stats |
| 203 | ) |