题解 | 推荐内容准确的用户平均评分

推荐内容准确的用户平均评分

https://www.nowcoder.com/practice/2dcac73b647247f0aef0b261ed76b47e

# 在if语句中比较属于不同表的两个字段时需要加上表前缀
# if(a.rec_info_l=b.hobby_l,1,0)
# distinct表示对后面的一个或多个列的拼接的一整条记录取不重复的结果
# where子句中没法使用查询列的别名进行过滤,因为在调用where子句时,select子句还没开始执行,但是order by能够识别别名,因为order by子句执行顺序在select之后。


# 答案一
# select avg(score) avg_score
# from (
#     select distinct user_id, score, if(a.rec_info_l=b.hobby_l,1,0) as accuracy
#     from recommend_tb a
#     inner join user_action_tb b
#     on a.rec_user = b.user_id
    
# ) c
# where accuracy = 1;

# 答案二
select avg(score) avg_score
from (
    select distinct user_id, score
from recommend_tb a
inner join user_action_tb b
on a.rec_user = b.user_id
where hobby_l = rec_info_l
) a


在if语句中比较属于不同表的两个字段时需要加上表前缀

if(a.rec_info_l=b.hobby_l,1,0)

distinct表示对后面的一个或多个列的拼接的一整条记录取不重复的结果

where子句中没法使用查询列的别名进行过滤,因为在调用where子句时,select子句还没开始执行,但是order by能够识别别名,因为order by子句执行顺序在select之后。

全部评论

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务