DatabaseCreation: console_10.sql

File console_10.sql, 4.5 KB (added by 231166, 2 days ago)
Line 
1--views:
2--Kiko:
3--1. view_top_rated_content — Топ содржини по просечен рејтинг
4
5CREATE OR REPLACE VIEW view_top_rated_content AS
6SELECT
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
17FROM Media m
18JOIN Rating r ON r.ContentContentID = m.ContentID
19LEFT JOIN Movie mo ON mo.MovieID = m.ContentID
20LEFT JOIN Series se ON se.SeriesID = m.ContentID
21GROUP BY m.ContentID, m.title, m.releaseDate, m.AgeRating, mo.MovieID, se.SeriesID
22ORDER BY avg_rating DESC;
23
24
25--2. view_user_watch_history — Историја на гледање по корисник
26
27CREATE OR REPLACE VIEW view_user_watch_history AS
28SELECT
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
40FROM WatchHistory wh
41JOIN "User" u ON u.UserID = wh.UserUserID
42JOIN Media m ON m.ContentID = wh.ContentContentID
43LEFT JOIN Movie mo ON mo.MovieID = m.ContentID
44LEFT JOIN Series se ON se.SeriesID = m.ContentID
45LEFT JOIN Devices d ON d.DeviceID = wh.DevicesDeviceID;
46
47--3. view_content_details — Детали за содржина со жанр, јазик, глумци
48
49CREATE OR REPLACE VIEW view_content_details AS
50SELECT
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
66FROM Media m
67LEFT JOIN Movie mo ON mo.MovieID = m.ContentID
68LEFT JOIN Series se ON se.SeriesID = m.ContentID
69LEFT JOIN Content_Genre cg ON cg.ContentContentID = m.ContentID
70LEFT JOIN Genre g ON g.GenreID = cg.GenreGenreID
71LEFT JOIN Content_Language cl ON cl.ContentContentID = m.ContentID
72LEFT JOIN Language l ON l.LanguageID = cl.LanguageLanguageID
73LEFT JOIN Content_Artist ca ON ca.ContentContentID = m.ContentID
74LEFT JOIN Artist a ON a.ArtistID = ca.ArtistArtistID
75LEFT JOIN Rating r ON r.ContentContentID = m.ContentID
76GROUP 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
82CREATE OR REPLACE VIEW view_active_subscriptions AS
83SELECT
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
97FROM User_Subscription us
98JOIN "User" u ON u.UserID = us.UserUserID
99JOIN Subscription s ON s.SubscriptionID = us.SubscriptionSubscriptionID
100LEFT JOIN Devices d ON d.UserSubscriptionID = us.UserSubscriptionID
101WHERE us.Status = 'Active'
102GROUP 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
109CREATE OR REPLACE VIEW view_series_episodes AS
110SELECT
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
121FROM Series se
122JOIN Media m ON m.ContentID = se.SeriesID
123JOIN Season sea ON sea.SeriesSeriesID = se.SeriesID
124JOIN Episode e ON e.SeasonSeasonID = sea.SeasonID
125ORDER BY m.title, sea.SeasonNumber, e.episodeNumber;
126
127
128--3. view_user_watchlist — Watchlist по корисник
129
130
131CREATE OR REPLACE VIEW view_user_watchlist AS
132SELECT
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
144FROM Watchlist wl
145JOIN "User" u ON u.UserID = wl.UserUserID
146JOIN Media m ON m.ContentID = wl.ContentContentID
147LEFT JOIN Movie mo ON mo.MovieID = m.ContentID
148LEFT JOIN Series se ON se.SeriesID = m.ContentID
149ORDER BY wl.dateAdded DESC;
150