| 1 | --views:
|
|---|
| 2 | --Kiko:
|
|---|
| 3 | --1. view_top_rated_content — Топ содржини по просечен рејтинг
|
|---|
| 4 |
|
|---|
| 5 | CREATE OR REPLACE VIEW view_top_rated_content AS
|
|---|
| 6 | SELECT
|
|---|
| 7 | m.ContentID,
|
|---|
| 8 | m.title,
|
|---|
| 9 | m.releaseDate,
|
|---|
| 10 | m.AgeRating,
|
|---|
| 11 | ROUND(AVG(r.RatingValue), 2) AS avg_rating,
|
|---|
| 12 | COUNT(r.RatingID) AS total_ratings,
|
|---|
| 13 | CASE
|
|---|
| 14 | WHEN mo.MovieID IS NOT NULL THEN 'Movie'
|
|---|
| 15 | ELSE 'Series'
|
|---|
| 16 | END AS content_type
|
|---|
| 17 | FROM Media m
|
|---|
| 18 | JOIN Rating r ON r.ContentContentID = m.ContentID
|
|---|
| 19 | LEFT JOIN Movie mo ON mo.MovieID = m.ContentID
|
|---|
| 20 | LEFT JOIN Series se ON se.SeriesID = m.ContentID
|
|---|
| 21 | GROUP BY m.ContentID, m.title, m.releaseDate, m.AgeRating, mo.MovieID, se.SeriesID
|
|---|
| 22 | ORDER BY avg_rating DESC;
|
|---|
| 23 |
|
|---|
| 24 |
|
|---|
| 25 | --2. view_user_watch_history — Историја на гледање по корисник
|
|---|
| 26 |
|
|---|
| 27 | CREATE OR REPLACE VIEW view_user_watch_history AS
|
|---|
| 28 | SELECT
|
|---|
| 29 | u.UserID,
|
|---|
| 30 | u.FirstName,
|
|---|
| 31 | u.LastName,
|
|---|
| 32 | m.title AS content_title,
|
|---|
| 33 | CASE
|
|---|
| 34 | WHEN mo.MovieID IS NOT NULL THEN 'Movie'
|
|---|
| 35 | ELSE 'Series'
|
|---|
| 36 | END AS content_type,
|
|---|
| 37 | wh.WatchedAt,
|
|---|
| 38 | wh.Progress_percentage,
|
|---|
| 39 | d.DeviceType
|
|---|
| 40 | FROM WatchHistory wh
|
|---|
| 41 | JOIN "User" u ON u.UserID = wh.UserUserID
|
|---|
| 42 | JOIN Media m ON m.ContentID = wh.ContentContentID
|
|---|
| 43 | LEFT JOIN Movie mo ON mo.MovieID = m.ContentID
|
|---|
| 44 | LEFT JOIN Series se ON se.SeriesID = m.ContentID
|
|---|
| 45 | LEFT JOIN Devices d ON d.DeviceID = wh.DevicesDeviceID;
|
|---|
| 46 |
|
|---|
| 47 | --3. view_content_details — Детали за содржина со жанр, јазик, глумци
|
|---|
| 48 |
|
|---|
| 49 | CREATE OR REPLACE VIEW view_content_details AS
|
|---|
| 50 | SELECT
|
|---|
| 51 | m.ContentID,
|
|---|
| 52 | m.title,
|
|---|
| 53 | m.releaseDate,
|
|---|
| 54 | m.AgeRating,
|
|---|
| 55 | CASE
|
|---|
| 56 | WHEN mo.MovieID IS NOT NULL THEN 'Movie'
|
|---|
| 57 | ELSE 'Series'
|
|---|
| 58 | END AS content_type,
|
|---|
| 59 | mo.Duration AS movie_duration,
|
|---|
| 60 | se.TotalSeasons,
|
|---|
| 61 | STRING_AGG(DISTINCT g.Name, ', ') AS genres,
|
|---|
| 62 | STRING_AGG(DISTINCT l.Name, ', ') AS languages,
|
|---|
| 63 | STRING_AGG(DISTINCT (a.FirstName || ' ' || a.LastName), ', ') AS artists,
|
|---|
| 64 | ROUND(AVG(r.RatingValue), 2) AS avg_rating,
|
|---|
| 65 | COUNT(DISTINCT r.RatingID) AS total_ratings
|
|---|
| 66 | FROM Media m
|
|---|
| 67 | LEFT JOIN Movie mo ON mo.MovieID = m.ContentID
|
|---|
| 68 | LEFT JOIN Series se ON se.SeriesID = m.ContentID
|
|---|
| 69 | LEFT JOIN Content_Genre cg ON cg.ContentContentID = m.ContentID
|
|---|
| 70 | LEFT JOIN Genre g ON g.GenreID = cg.GenreGenreID
|
|---|
| 71 | LEFT JOIN Content_Language cl ON cl.ContentContentID = m.ContentID
|
|---|
| 72 | LEFT JOIN Language l ON l.LanguageID = cl.LanguageLanguageID
|
|---|
| 73 | LEFT JOIN Content_Artist ca ON ca.ContentContentID = m.ContentID
|
|---|
| 74 | LEFT JOIN Artist a ON a.ArtistID = ca.ArtistArtistID
|
|---|
| 75 | LEFT JOIN Rating r ON r.ContentContentID = m.ContentID
|
|---|
| 76 | GROUP BY m.ContentID, m.title, m.releaseDate, m.AgeRating, mo.MovieID, mo.Duration, se.TotalSeasons;
|
|---|
| 77 |
|
|---|
| 78 |
|
|---|
| 79 | --Damjan:
|
|---|
| 80 | --1. view_active_subscriptions — Активни претплати
|
|---|
| 81 |
|
|---|
| 82 | CREATE OR REPLACE VIEW view_active_subscriptions AS
|
|---|
| 83 | SELECT
|
|---|
| 84 | u.UserID,
|
|---|
| 85 | u.FirstName,
|
|---|
| 86 | u.LastName,
|
|---|
| 87 | u.Email,
|
|---|
| 88 | s.Name AS subscription_plan,
|
|---|
| 89 | s.Price,
|
|---|
| 90 | s.MaxDevices,
|
|---|
| 91 | s.VideoQuality,
|
|---|
| 92 | us.Start_date,
|
|---|
| 93 | us.End_date,
|
|---|
| 94 | us.Status,
|
|---|
| 95 | us.Auto_renew,
|
|---|
| 96 | COUNT(d.DeviceID) AS active_devices
|
|---|
| 97 | FROM User_Subscription us
|
|---|
| 98 | JOIN "User" u ON u.UserID = us.UserUserID
|
|---|
| 99 | JOIN Subscription s ON s.SubscriptionID = us.SubscriptionSubscriptionID
|
|---|
| 100 | LEFT JOIN Devices d ON d.UserSubscriptionID = us.UserSubscriptionID
|
|---|
| 101 | WHERE us.Status = 'Active'
|
|---|
| 102 | GROUP BY u.UserID, u.FirstName, u.LastName, u.Email,
|
|---|
| 103 | s.Name, s.Price, s.MaxDevices, s.VideoQuality,
|
|---|
| 104 | us.Start_date, us.End_date, us.Status, us.Auto_renew;
|
|---|
| 105 |
|
|---|
| 106 |
|
|---|
| 107 | --2. view_series_episodes — Епизоди по серија и сезона
|
|---|
| 108 |
|
|---|
| 109 | CREATE OR REPLACE VIEW view_series_episodes AS
|
|---|
| 110 | SELECT
|
|---|
| 111 | m.ContentID AS series_id,
|
|---|
| 112 | m.title AS series_title,
|
|---|
| 113 | se.TotalSeasons,
|
|---|
| 114 | sea.SeasonID,
|
|---|
| 115 | sea.SeasonNumber,
|
|---|
| 116 | sea.ReleaseYear,
|
|---|
| 117 | e.EpisodeID,
|
|---|
| 118 | e.episodeNumber,
|
|---|
| 119 | e.Title AS episode_title,
|
|---|
| 120 | e.Duration AS episode_duration
|
|---|
| 121 | FROM Series se
|
|---|
| 122 | JOIN Media m ON m.ContentID = se.SeriesID
|
|---|
| 123 | JOIN Season sea ON sea.SeriesSeriesID = se.SeriesID
|
|---|
| 124 | JOIN Episode e ON e.SeasonSeasonID = sea.SeasonID
|
|---|
| 125 | ORDER BY m.title, sea.SeasonNumber, e.episodeNumber;
|
|---|
| 126 |
|
|---|
| 127 |
|
|---|
| 128 | --3. view_user_watchlist — Watchlist по корисник
|
|---|
| 129 |
|
|---|
| 130 |
|
|---|
| 131 | CREATE OR REPLACE VIEW view_user_watchlist AS
|
|---|
| 132 | SELECT
|
|---|
| 133 | u.UserID,
|
|---|
| 134 | u.FirstName,
|
|---|
| 135 | u.LastName,
|
|---|
| 136 | m.title AS content_title,
|
|---|
| 137 | CASE
|
|---|
| 138 | WHEN mo.MovieID IS NOT NULL THEN 'Movie'
|
|---|
| 139 | ELSE 'Series'
|
|---|
| 140 | END AS content_type,
|
|---|
| 141 | m.AgeRating,
|
|---|
| 142 | m.releaseDate,
|
|---|
| 143 | wl.dateAdded
|
|---|
| 144 | FROM Watchlist wl
|
|---|
| 145 | JOIN "User" u ON u.UserID = wl.UserUserID
|
|---|
| 146 | JOIN Media m ON m.ContentID = wl.ContentContentID
|
|---|
| 147 | LEFT JOIN Movie mo ON mo.MovieID = m.ContentID
|
|---|
| 148 | LEFT JOIN Series se ON se.SeriesID = m.ContentID
|
|---|
| 149 | ORDER BY wl.dateAdded DESC;
|
|---|
| 150 |
|
|---|