Changes between Version 7 and Version 8 of Напредни извештаи од базата (SQL и складирани процедури)
- Timestamp:
- 09/06/25 14:40:23 (41 hours ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Напредни извештаи од базата (SQL и складирани процедури)
v7 v8 1 1 == Напредни извештаи од базата 2 2 3 * Извештај за најпопуларни летови по резервација3 * Извештај за букинзи на корисник 4 4 5 5 {{{ 6 6 7 CREATE VIEW MostPopularFlightsReportAS7 CREATE OR REPLACE VIEW v_user_bookings AS 8 8 SELECT 9 u.UserID, 10 u.Name || ' ' || u.Surname AS FullName, 11 b.BookingID, 12 b.BookingDate, 13 b.PaymentStatus, 14 b.TotalCost, 9 15 f.FlightID, 10 f.Flight_Number, 11 f.Departure_Airport, 12 f.Arrival_Airport, 13 COUNT(bf.BookingID) AS NumberOfBookings 14 FROM 15 Flight f 16 JOIN BookingFlight bf ON f.FlightID = bf.FlightID 17 GROUP BY 18 f.FlightID, f.Flight_Number, f.Departure_Airport, f.Arrival_Airport 19 ORDER BY 20 NumberOfBookings DESC; 21 22 }}} 23 24 * Извештај за просечен рејтинг по дестинација 25 26 {{{ 27 28 CREATE VIEW AverageDestinationRatingReport AS 29 SELECT 30 d.DestinationID, 31 d.Name AS DestinationName, 32 AVG(r.Rating) AS AverageRating 33 FROM 34 Review r 35 JOIN Booking b ON r.BookingID = b.BookingID 16 f.FlightNumber, 17 f.DepartureDate, 18 f.ReturnDate, 19 dep.Name AS DepartureAirport, 20 arr.Name AS ArrivalAirport, 21 f.Price 22 FROM Booking b 23 JOIN ApplicationUser u ON b.UserID = u.UserID 36 24 JOIN BookingFlight bf ON b.BookingID = bf.BookingID 37 25 JOIN Flight f ON bf.FlightID = f.FlightID 38 JOIN Airport a ON f.Arrival_Airport = a.AirportID 39 JOIN Destination d ON a.DestinationID = d.DestinationID 40 GROUP BY 41 d.DestinationID, d.Name 42 ORDER BY 43 AverageRating DESC; 44 45 }}} 46 47 * Извештај за историја на резервации на корисници со вкупни трошоци 48 49 {{{ 50 51 CREATE VIEW UserBookingExpenditureReport AS 52 SELECT 53 u.UserID, 54 u.Name, 55 u.Surname, 56 COUNT(DISTINCT b.BookingID) AS NumberOfBookings, 57 SUM(b.Total_Cost) AS TotalExpenditure 58 FROM 59 ApplicationUser u 60 JOIN Booking b ON u.UserID = b.UserID 61 GROUP BY 62 u.UserID, u.Name, u.Surname 63 ORDER BY 64 TotalExpenditure DESC; 26 JOIN Airport dep ON f.DepartureAirportID = dep.AirportID 27 JOIN Airport arr ON f.ArrivalAirportID = arr.AirportID; 65 28 66 29 67 30 }}} 68 31 69 * Извештај за резервации со статус 'Pending'32 * Извештај за летови 70 33 71 34 {{{ 72 35 73 CREATE VIEW PendingPaymentBookingsReportAS36 CREATE OR REPLACE VIEW v_flight_summary AS 74 37 SELECT 75 b.BookingID, 76 u.Name AS UserName, 77 u.Surname AS UserSurname, 78 STRING_AGG(f.Flight_Number, ', ') AS Flights, 79 b.Booking_Date, 80 b.Total_Cost 81 FROM 82 Booking b 83 JOIN ApplicationUser u ON b.UserID = u.UserID 84 JOIN BookingFlight bf ON b.BookingID = bf.BookingID 85 JOIN Flight f ON bf.FlightID = f.FlightID 86 WHERE 87 b.Payment_Status = 'PENDING' 88 GROUP BY 89 b.BookingID, u.Name, u.Surname, b.Booking_Date, b.Total_Cost; 38 f.FlightID, 39 f.FlightNumber, 40 dep.Name AS DepartureAirport, 41 arr.Name AS ArrivalAirport, 42 f.DepartureDate, 43 f.ReturnDate, 44 f.Price, 45 f.AvailableSeats, 46 COUNT(bf.BookingID) AS TotalBookings 47 FROM Flight f 48 JOIN Airport dep ON f.DepartureAirportID = dep.AirportID 49 JOIN Airport arr ON f.ArrivalAirportID = arr.AirportID 50 LEFT JOIN BookingFlight bf ON f.FlightID = bf.FlightID 51 GROUP BY f.FlightID, f.FlightNumber, dep.Name, arr.Name, f.DepartureDate, f.ReturnDate, f.Price, f.AvailableSeats; 90 52 91 53 }}} 92 54 93 * Извештај за топ 5 дестинации според Wishlist55 * Извештај за рецензии 94 56 95 57 {{{ 96 58 97 CREATE VIEW TopDestinationsWishlistReportAS59 CREATE OR REPLACE VIEW v_reviews AS 98 60 SELECT 99 d.DestinationID, 100 d.Name AS DestinationName, 101 d.Country, 102 COUNT(w.WishlistID) AS NumberOfWishlistEntries 103 FROM 104 Wishlist w 105 JOIN Destination d ON w.TargetID = d.DestinationID 106 GROUP BY 107 d.DestinationID, d.Name, d.Country 108 ORDER BY 109 NumberOfWishlistEntries DESC 110 LIMIT 5; 61 r.ReviewID, 62 u.Name || ' ' || u.Surname AS Reviewer, 63 r.TargetID, 64 r.TargetType, 65 r.ReviewComment, 66 r.Rating, 67 r.Date 68 FROM Review r 69 JOIN ApplicationUser u ON r.UserID = u.UserID; 111 70 112 71 }}} 113 72 114 * Извештај за корисници кои имаат највеќе резервации73 * Извештај за извршени плаќања по корисник 115 74 116 75 {{{ 117 76 118 CREATE VIEW TopUsersByBookings AS77 CREATE OR REPLACE VIEW v_user_payments AS 119 78 SELECT 120 79 u.UserID, 121 u.Name, 122 u.Surname, 123 COUNT(DISTINCT b.BookingID) AS NumberOfBookings 124 FROM 125 ApplicationUser u 126 JOIN Booking b ON u.UserID = b.UserID 127 GROUP BY 128 u.UserID, u.Name, u.Surname 129 ORDER BY 130 NumberOfBookings DESC; 131 80 u.Name || ' ' || u.Surname AS FullName, 81 COUNT(p.PaymentID) AS NumPayments, 82 SUM(p.Amount) AS TotalPaid, 83 AVG(p.Amount) AS AvgPayment 84 FROM Payment p 85 JOIN ApplicationUser u ON p.UserID = u.UserID 86 GROUP BY u.UserID, u.Name, u.Surname; 132 87 133 88 }}} 134 89 135 * Извештај за корисници со највеќе рецензии90 * Извештај за Wishlist 136 91 137 92 {{{ 138 93 139 CREATE VIEW FrequentFlightReviewersAS94 CREATE OR REPLACE VIEW v_user_wishlist AS 140 95 SELECT 141 96 u.UserID, 142 u.Name, 143 u.Surname, 144 COUNT(r.ReviewID) AS NumberOfReviews 145 FROM 146 Review r 147 JOIN Booking b ON r.BookingID = b.BookingID 148 JOIN ApplicationUser u ON b.UserID = u.UserID 149 JOIN BookingFlight bf ON b.BookingID = bf.BookingID 150 JOIN Flight f ON bf.FlightID = f.FlightID 151 GROUP BY 152 u.UserID, u.Name, u.Surname 153 ORDER BY 154 NumberOfReviews DESC; 155 97 u.Name || ' ' || u.Surname AS FullName, 98 w.WishlistID, 99 w.TargetID, 100 w.TargetType, 101 w.DateAdded 102 FROM Wishlist w 103 JOIN ApplicationUser u ON w.UserID = u.UserID; 156 104 157 105 }}} 158 106 159 160 * Извештај за најдобри начини на плаќање според вкупната потрошувачка 107 * Извештај за најдобро рангирани летови 161 108 162 109 {{{ 163 110 164 CREATE VIEW PaymentMethodSpendReportAS111 CREATE OR REPLACE VIEW v_best_value_flights AS 165 112 SELECT 166 p.Payment_Method,167 SUM(p.Amount) AS TotalAmountSpent168 FROM 169 Payment p170 GROUP BY 171 p.Payment_Method 172 ORDER BY 173 TotalAmountSpent DESC;113 f.FlightID, 114 f.FlightNumber, 115 f.Price, 116 COALESCE(AVG(r.Rating), 0) AS AvgRating 117 FROM Flight f 118 LEFT JOIN Review r ON r.TargetType = 'Flight' AND r.TargetID = f.FlightID 119 GROUP BY f.FlightID, f.FlightNumber, f.Price 120 HAVING COALESCE(AVG(r.Rating),0) > 4 AND f.Price < 200; 174 121 175 122 }}} 176 123 177 * Извештај за резервација на летови по град на поаѓање178 179 {{{180 181 CREATE VIEW FlightBookingByDepartureDestination AS182 SELECT183 depDest.DestinationID,184 depDest.Name AS DepartureDestinationName,185 COUNT(b.BookingID) AS NumberOfBookings186 FROM187 Booking b188 JOIN BookingFlight bf ON b.BookingID = bf.BookingID189 JOIN Flight f ON bf.FlightID = f.FlightID190 JOIN Airport depA ON f.Departure_Airport = depA.AirportID191 JOIN Destination depDest ON depA.DestinationID = depDest.DestinationID192 GROUP BY193 depDest.DestinationID, depDest.Name194 ORDER BY195 NumberOfBookings DESC;196 197 }}}198 124 199 125 * Извештај за топ 3 најпопуларни дестинации, аеродроми и летови за секој месец во годината … … 201 127 {{{ 202 128 203 CREATE VIEW TopMonthlyReport AS129 CREATE OR REPLACE VIEW TopMonthlyReport AS 204 130 WITH MonthlyBookings AS ( 205 131 SELECT 206 DATE_TRUNC('month', b.Booking _Date) AS Month,132 DATE_TRUNC('month', b.BookingDate) AS Month, 207 133 d.Name AS DestinationName, 208 134 COUNT(b.BookingID) AS BookingsCount, 209 RANK() OVER (PARTITION BY DATE_TRUNC('month', b.Booking _Date)135 RANK() OVER (PARTITION BY DATE_TRUNC('month', b.BookingDate) 210 136 ORDER BY COUNT(b.BookingID) DESC) AS Rank 211 137 FROM Booking b 212 138 JOIN BookingFlight bf ON b.BookingID = bf.BookingID 213 139 JOIN Flight f ON bf.FlightID = f.FlightID 214 JOIN Airport a ON f.Arrival _Airport= a.AirportID140 JOIN Airport a ON f.ArrivalAirportID = a.AirportID 215 141 JOIN Destination d ON a.DestinationID = d.DestinationID 216 142 GROUP BY Month, d.Name … … 218 144 MonthlyFlights AS ( 219 145 SELECT 220 DATE_TRUNC('month', b.Booking _Date) AS Month,221 f.Flight _Number,146 DATE_TRUNC('month', b.BookingDate) AS Month, 147 f.FlightNumber, 222 148 COUNT(b.BookingID) AS BookingsCount, 223 RANK() OVER (PARTITION BY DATE_TRUNC('month', b.Booking _Date)149 RANK() OVER (PARTITION BY DATE_TRUNC('month', b.BookingDate) 224 150 ORDER BY COUNT(b.BookingID) DESC) AS Rank 225 151 FROM Booking b 226 152 JOIN BookingFlight bf ON b.BookingID = bf.BookingID 227 153 JOIN Flight f ON bf.FlightID = f.FlightID 228 GROUP BY Month, f.Flight _Number154 GROUP BY Month, f.FlightNumber 229 155 ), 230 156 MonthlyAirports AS ( 231 157 SELECT 232 DATE_TRUNC('month', b.Booking _Date) AS Month,158 DATE_TRUNC('month', b.BookingDate) AS Month, 233 159 a.Name AS AirportName, 234 160 COUNT(b.BookingID) AS DeparturesCount, 235 RANK() OVER (PARTITION BY DATE_TRUNC('month', b.Booking _Date)161 RANK() OVER (PARTITION BY DATE_TRUNC('month', b.BookingDate) 236 162 ORDER BY COUNT(b.BookingID) DESC) AS Rank 237 163 FROM Booking b 238 164 JOIN BookingFlight bf ON b.BookingID = bf.BookingID 239 165 JOIN Flight f ON bf.FlightID = f.FlightID 240 JOIN Airport a ON f.Departure _Airport= a.AirportID166 JOIN Airport a ON f.DepartureAirportID = a.AirportID 241 167 GROUP BY Month, a.Name 242 168 ) … … 244 170 FROM MonthlyBookings WHERE Rank <= 3 245 171 UNION ALL 246 SELECT Month, 'Flight' AS Category, Flight _Number AS Name, BookingsCount AS Count172 SELECT Month, 'Flight' AS Category, FlightNumber AS Name, BookingsCount AS Count 247 173 FROM MonthlyFlights WHERE Rank <= 3 248 174 UNION ALL