| Version 3 (modified by , 9 months ago) ( diff ) |
|---|
Напредни извештаи од базата
- Извештај за најпопуларни летови по резервација
CREATE VIEW MostPopularFlightsReport AS
SELECT
f.FlightID,
f.FlightNumber,
f.DepartureAirport,
f.ArrivalAirport,
COUNT(b.BookingID) AS NumberOfBookings
FROM
Flight f
JOIN
Booking b ON f.FlightID = b.FlightID
GROUP BY
f.FlightID, f.FlightNumber, f.DepartureAirport, f.ArrivalAirport
ORDER BY
NumberOfBookings DESC;
- Извештај за просечен рејтинг по дестинација
CREATE VIEW AverageDestinationRatingReport AS
SELECT
d.DestinationID,
d.Name AS DestinationName,
AVG(r.Rating) AS AverageRating
FROM
Review r
JOIN
Destination d ON r.TargetID = d.DestinationID
GROUP BY
d.DestinationID, d.Name
ORDER BY
AverageRating DESC;
- Извештај за историја на резервации на корисници со вкупни трошоци
CREATE VIEW UserBookingExpenditureReport AS
SELECT
u.UserID,
u.Name,
u.Surname,
COUNT(b.BookingID) AS NumberOfBookings,
SUM(b.TotalCost) AS TotalExpenditure
FROM
ApplicationUser u
JOIN
Booking b ON u.UserID = b.UserID
GROUP BY
u.UserID, u.Name, u.Surname
ORDER BY
TotalExpenditure DESC;
- Извештај за резервации со статус 'Pending'
CREATE VIEW PendingPaymentBookingsReport AS
SELECT
b.BookingID,
u.Name AS UserName,
u.Surname AS UserSurname,
f.FlightNumber,
f.DepartureAirport,
f.ArrivalAirport,
b.BookingDate,
b.TotalCost
FROM
Booking b
JOIN
ApplicationUser u ON b.UserID = u.UserID
JOIN
Flight f ON b.FlightID = f.FlightID
WHERE
b.PaymentStatus = 'Pending';
- Извештај за топ 5 дестинации според Wishlist
CREATE VIEW TopDestinationsWishlistReport AS
SELECT
d.DestinationID,
d.Name AS DestinationName,
d.Country,
COUNT(w.WishlistID) AS NumberOfWishlistEntries
FROM
Wishlist w
JOIN
Destination d ON w.TargetID = d.DestinationID
GROUP BY
d.DestinationID, d.Name, d.Country
ORDER BY
NumberOfWishlistEntries DESC
LIMIT 5;
- Извештај за корисници кои имаат највеќе резервации
CREATE VIEW TopUsersByBookings AS
SELECT
u.UserID,
u.Name,
u.Surname,
COUNT(b.BookingID) AS NumberOfBookings
FROM
ApplicationUser u
JOIN
Booking b ON u.UserID = b.UserID
GROUP BY
u.UserID, u.Name, u.Surname
ORDER BY
NumberOfBookings DESC;
- Извештај за корисници со највеќе рецензии
CREATE VIEW FrequentFlightReviewers AS
SELECT
u.UserID,
u.Name,
u.Surname,
COUNT(r.ReviewID) AS NumberOfReviews
FROM
Review r
JOIN
ApplicationUser u ON r.UserID = u.UserID
WHERE
r.TargetID IN (SELECT FlightID FROM Flight)
GROUP BY
u.UserID, u.Name, u.Surname
ORDER BY
NumberOfReviews DESC;
- Извештај за следни летови
CREATE VIEW UpcomingFlightsWithAvailability AS
SELECT
f.FlightID,
f.FlightNumber,
f.DepartureAirport,
f.ArrivalAirport,
f.DepartureTime,
f.ArrivalTime,
f.AvailableSeats
FROM
Flight f
WHERE
f.DepartureTime > NOW() AND f.AvailableSeats > 0
ORDER BY
f.DepartureTime;
- Извештај за најдобри начини на плаќање според вкупната потрошувачка
CREATE VIEW PaymentMethodSpendReport AS
SELECT
p.PaymentMethod,
SUM(p.Amount) AS TotalAmountSpent
FROM
Payment p
GROUP BY
p.PaymentMethod
ORDER BY
TotalAmountSpent DESC;
- Извештај за резервација на летови по град на поаѓање
CREATE VIEW FlightBookingByCity AS
SELECT
a.CityID,
c.Name AS CityName,
COUNT(b.BookingID) AS NumberOfBookings
FROM
Booking b
JOIN
Flight f ON b.FlightID = f.FlightID
JOIN
Airport a ON f.DepartureAirport = a.AirportID
JOIN
City c ON a.CityID = c.CityID
GROUP BY
a.CityID, c.Name
ORDER BY
NumberOfBookings DESC;
- Извештај за топ 3 најпопуларни дестинации, аеродроми и летови за секој месец во годината
WITH MonthlyBookings AS (
SELECT
DATE_TRUNC('month', b.bookingDate) AS month,
d.Name AS destination_name,
COUNT(b.BookingID) AS bookings_count,
RANK() OVER (PARTITION BY DATE_TRUNC('month', b.bookingDate) ORDER BY COUNT(b.BookingID) DESC) AS rank
FROM Booking b
JOIN Flight f ON b.FlightID = f.FlightID
JOIN Airport a ON f.ArrivalAirport = a.AirportID
JOIN Destination d ON a.City = d.DestinationID
GROUP BY month, destination_name
),
MonthlyFlights AS (
SELECT
DATE_TRUNC('month', b.bookingDate) AS month,
f.FlightNumber,
COUNT(b.BookingID) AS bookings_count,
RANK() OVER (PARTITION BY DATE_TRUNC('month', b.bookingDate) ORDER BY COUNT(b.BookingID) DESC) AS rank
FROM Booking b
JOIN Flight f ON b.FlightID = f.FlightID
GROUP BY month, f.FlightNumber
),
MonthlyAirports AS (
SELECT
DATE_TRUNC('month', b.bookingDate) AS month,
a.Name AS airport_name,
COUNT(b.BookingID) AS departures_count,
RANK() OVER (PARTITION BY DATE_TRUNC('month', b.bookingDate) ORDER BY COUNT(b.BookingID) DESC) AS rank
FROM Booking b
JOIN Flight f ON b.FlightID = f.FlightID
JOIN Airport a ON f.DepartureAirport = a.AirportID
GROUP BY month, a.Name
)
SELECT month, 'Destination' AS category, destination_name AS name, bookings_count AS count FROM MonthlyBookings WHERE rank <= 3
UNION ALL
SELECT month, 'Flight' AS category, FlightNumber AS name, bookings_count AS count FROM MonthlyFlights WHERE rank <= 3
UNION ALL
SELECT month, 'Airport' AS category, airport_name AS name, departures_count AS count FROM MonthlyAirports WHERE rank <= 3
ORDER BY month, category, count DESC;
Note:
See TracWiki
for help on using the wiki.
