wiki:Напредни извештаи од базата (SQL и складирани процедури)

Version 3 (modified by 173067, 2 weeks 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.