Version 12 (modified by 3 years ago) ( diff ) | ,
---|
Напредни извештаи од базата (SQL и складирани процедури)
Прикажување на најдискутираните филмови за секоја година
select year,title, (num_discussions + num_replies) as total from ( select godini.year,m.title , count(d1.discussion_id) as num_discussions, count(r.reply_id) as num_replies from movies m left join discussions d1 on d1.movie_id = m.movie_id left join replies r on r.discussion_id = d1.discussion_id join( select distinct extract(year from d.date) as year from discussions d ) as godini on godini.year = extract(year from d1.date) or extract(year from r.date) = godini.year group by m.title, godini.year ) as sum_by_year where (num_discussions + num_replies) = ( select max(num_discussions + num_replies) from ( select godini.year1,m.title as title1 , count(d1.discussion_id) as num_discussions, count(r.reply_id) as num_replies from movies m left join discussions d1 on d1.movie_id = m.movie_id left join replies r on r.discussion_id = d1.discussion_id join( select distinct extract(year from d.date) as year1 from discussions d ) as godini on godini.year1 = extract(year from d1.date) or extract(year from r.date) = godini.year1 group by m.title, godini.year1 ) as diskusii_repliki where diskusii_repliki.year1 = year group by diskusii_repliki.year1 );
Предложување на 15те најдобро рангирани филмови на даден корисник, врз база на корисниците со кои стапил во интеракција во последните 2 месеци и корисници кои имаат оставено број на реплики поголем или еднаков од вкупниот просечен на број на реплики по сите корисници
select title from( select m.title, sum(mv.stars_rated) as total from replies r join discussions d on r.discussion_id = d.discussion_id join replies r2 on r2.discussion_id = d.discussion_id and r2.user_id != 1 join users u on u.user_id = r2.user_id and ( select count(r3.reply_id) from replies r3 group by u.user_id ) >= ( select count(*) / (select count(*) from users) from replies ) join movie_rates mv on mv.user_id = u.user_id join movies m on m.movie_id = mv.movie_id where r.user_id = 1 and r.date between current_date - interval '2 months' and current_date group by m.title order by sum(mv.stars_rated) desc limit 15 ) as tabela;
- при реализација на прашалникот, наместо 1, ќе биде искористено соодветниот идентификатор на најавениот корисник
Прикажување на бројот на филмови за секој жанр во секоја година, сортирани според бројот на филмови.
select g.genre_type, extract(year from m.airing_date), count(m.movie_id) as movie_count from genres as g join movie_genres as mg on mg.genre_id = g.genre_id join movies as m on m.movie_id = mg.movie_id group by g.genre_type, extract(year from m.airing_date) order by movie_count desc
Прикажување на бројот на дискусии и реплики за сите корисници кои се во базата, сортирани според бројот на реплики и дискусии.
select u.user_id, u.name, u.surname, count(d.discussion_id) as discussion_count, count (r.reply_id) as reply_count from users u left join discussions as d on d.user_id = u.user_id left join replies as r on r.user_id = u.user_id group by u.user_id, u.name, u.surname order by count(d.discussion_id) + count (r.reply_id) desc
Note:
See TracWiki
for help on using the wiki.