电影sql问题

 

看的次数多 或者 评分高

每个用户最喜欢哪个类型的电影

row_number()

ratings表中一个电影出现几次?

一个电影有几种类型?

类型在movies   评分或者观看次数ratings

movies join ratings

//将类型炸开

select mid,mname,lx from movies lateral view explode(split(type,"\\|")) types as lx;//这是炸开的表

//观看的次数  类型  id

select count(*) cnt,r.uid,t.lx

(select mid,mname,lx from movies lateral view explode(split(type,"\\|")) types as lx ) t,ratings r

where r.mid=t.mid  

group by r.uid,t.lx

//开窗函数

select t2.uid,t2.lx

from

(select row_number() over (partition by t1.uid order by t1.cnt desc) rn,t1.uid,t1.lx

from

(select count(*) cnt,r.uid,t.lx

(select mid,mname,lx from movies lateral view explode(split(type,"\\|")) types as lx ) t,ratings r

where r.mid=t.mid  

group by r.uid,t.lx) t1)t2

where t2.rn=1;

//uid lx  这个用户最喜欢的类型

======================================================================================

lx m1 m2 m3 

//电影表

select mid,mname,lx from movies lateral view explode(split(type,"\\|")) types as lx

 

 

select count(*) cnt,t.lx,r.mid

(select mid,mname,lx from movies lateral view explode(split(type,"\\|")) types as lx) t,ratings r

where r.mid=t.mid

group t.lx=r.mid; 

 

 

select row_number() overs (partition by t1.lx order by t1.cnt desc),t1.lx,t1.mid

(select count(*) cnt,t.lx,r.mid

(select mid,mname,lx from movies lateral view explode(split(type,"\\|")) types as lx) t,ratings r

where r.mid=t.mid

group t.lx=r.mid) t1

 

//

select t2.lx,t2.mid

from

(select row_number() overs (partition by t1.lx order by t1.cnt desc) rn,t1.lx,t1.mid

(select count(*) cnt,t.lx,r.mid

(select mid,mname,lx from movies lateral view explode(split(type,"\\|")) types as lx) t,ratings r

where r.mid=t.mid

group t.lx=r.mid) t1) t2

 

 

每个类型最受欢迎的前三个电影

类型==类型

 

转载于:https://www.cnblogs.com/JBLi/p/10857553.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值