i have create movie database, , 1 of queries involves showing list of movies user has "rated," along actual rating , genre.
additionally, must show percentage of genre out of movies user has rated. example:
create table genres ( movieid int not null, genre varchar(20), primary key(movieid), foreign key(movieid) references movies(id) );
query:
select u.userid, m.title, u.userrating, g.genre user_ratedmovies u, movies m, genres g (m.id = u.movieid) , (u.userid "example") , (g.movieid = m.id) order date_year, date_month, date_day, date_hour, date_minute, date_second;
this returns need except percentage of total. that's lost. i'm new sql , struggle count(*) , group by.
the challenge of needs presenting unit level data aggregate level data. hence, consider using aggregate groupby derived tables (nested select statements in from
or join
clauses) correlates (matches userid
) set query (using explicit instead of implicit joins):
select u.userid, m.title, u.userrating, g.genre, (gdt.genre_count / udt.rating_count) percentage user_ratedmovies u inner join movies m on m.id = u.movieid inner join genres g on m.id = g.movieid inner join -- counts corresponding user , genre (select subu.userid, subg.genre, count(*) genre_count user_ratedmovies subu inner join movies subm on subm.id = subu.movieid inner join genres subg on subm.id = subg.movieid group subu.userid, subg.genre) gdt on gdt.userid = u.userid , gdt.genre = g.genre inner join -- counts corresponding user (select subu.userid, count(*) rating_count user_ratedmovies subu group subu.userid) udt on udt.userid = u.userid u.userid "example" order date_year, date_month, date_day, date_hour, date_minute, date_second;
Comments
Post a Comment