首页 > 试题广场 >

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

[编程题]推荐内容准确的用户平均评分
  • 热度指数:42937 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
某产品2022年2月8日系统推荐内容给部分用户的数据,以及用户信息和对推荐内容的评分交叉表部分数据如下:
推荐内容表recommend_tb(rec_id-推荐信息id,rec_info_l-推荐信息标签,rec_user-推荐目标用户id,rec_time-推荐时间,如下所示:
rec_id rec_info_l rec_user rec_time
1 健身 101 2022-02-08 07:23:15
2 美妆 102 2022-02-08 07:24:15
3 体育 103 2022-02-08 07:25:15
4 美妆 103 2022-02-08 07:26:15
5 政要 104 2022-02-08 07:27:15
6 体育 104 2022-02-08 07:28:15
7 体育 105 2022-02-08 07:29:15
8 影视 106 2022-02-08 07:30:15
用户信息及评分交叉表user_action_tbuser_id-用户id,hobby_l-用户喜好标签,score-综合评分),如下所示:
注:该表score为对所有推荐给该用户的内容的综合评分,在计算用户平均评分切勿将推荐次数作为分母
user_id hobby_l score
101 健身 88
102 影视 81
103 美妆 78
104 健身 68
105 体育 90
106 影视 82

问题:请统计推荐内容准确的用户平均评分?(结果保留3位小数)
注:(1)准确的定义:推荐的内容标签与用户喜好标签一致;如推荐多次给同一用户,有一次及以上准确就归为准确。
示例数据结果如下:
avg_score
84.500
解释:一共推荐8条内容,其中推荐给101、103、105、106四位用户的内容准确,
四位用户的评分分别是88、78、90、82,故平均评分=(88+78+90+82)/4=84.500
(2)如果同一用户推荐同一个内容标签的话,计算的时候只算一次。
示例1

输入

drop table if exists  `recommend_tb` ; 
CREATE TABLE `recommend_tb` (
`rec_id` int(11) NOT NULL,
`rec_info_l` varchar(8) NOT NULL,
`rec_user` int(11) NOT NULL,
`rec_time` datetime NOT NULL,
PRIMARY KEY (`rec_id`));
INSERT INTO recommend_tb VALUES(1,'健身',101,'2022-02-08 07:23:15');
INSERT INTO recommend_tb VALUES(2,'美妆',102,'2022-02-08 07:24:15');
INSERT INTO recommend_tb VALUES(3,'体育',103,'2022-02-08 07:25:15');
INSERT INTO recommend_tb VALUES(4,'美妆',103,'2022-02-08 07:26:15');
INSERT INTO recommend_tb VALUES(5,'政要',104,'2022-02-08 07:27:15');
INSERT INTO recommend_tb VALUES(6,'体育',104,'2022-02-08 07:28:15');
INSERT INTO recommend_tb VALUES(7,'体育',105,'2022-02-08 07:29:15');
INSERT INTO recommend_tb VALUES(8,'影视',106,'2022-02-08 07:30:15');

drop table if exists  `user_action_tb` ;   
CREATE TABLE `user_action_tb` (
`user_id` int(11) NOT NULL,
`hobby_l` varchar(8) NOT NULL,
`score` int(11) NOT NULL,
PRIMARY KEY (`user_id`));
INSERT INTO user_action_tb VALUES(101,'健身',88);
INSERT INTO user_action_tb VALUES(102,'影视',81);
INSERT INTO user_action_tb VALUES(103,'美妆',78);
INSERT INTO user_action_tb VALUES(104,'健身',68);
INSERT INTO user_action_tb VALUES(105,'体育',90);
INSERT INTO user_action_tb VALUES(106,'影视',82);

输出

84.500
头像 牛客题解官
发表于 2025-02-20 10:56:05
精华题解 这道题目要求我们计算推荐内容准确的用户的平均评分。下面是这个SQL查询的思路和实现步骤。 1. 确定总体问题 我们需要找出推荐内容准确的用户,并计算这些用户的平均评分。准确的定义是推荐的内容标签与用户喜好标签一致。我们需要从两个表中提取数据,计算符合条件的用户的平均评分,并保留三位小数。 2. 分析 展开全文
头像 拒绝996的小蜗牛很自信
发表于 2024-08-09 22:01:09
select round(sum(score)/count(distinct user_id),3) as avg_score from user_action_tb where user_id in (select user_id from user_action_tb as tb1 join 展开全文
头像 liudelantu
发表于 2024-08-26 22:52:39
-- 问题提炼:推荐内容准确 求这些用户的平均评分 SELECT ROUND(AVG(DISTINCT u.score), 3) AS avg_score FROM recommend_tb r INNER JOIN user_action_tb u O 展开全文
头像 麦田里的大白免
发表于 2024-11-15 15:02:45
SELECT AVG(score) FROM ( SELECT DISTINCT rec_info_l, rec_user, score FROM reco 展开全文
头像 我加油我加油
发表于 2024-11-29 13:50:07
select round(avg(distinct u.score),3) as avg_score from recommend_tb r left join user_action_tb u on r.rec_user=u.user_id and rec_info_l=hobby_l
头像 Jeremygogo
发表于 2024-09-01 11:00:06
with t1 as (SELECT DISTINCT rec_info_l,r.rec_user,hobby_l,score from recommend_tb r inner join user_action_tb u on r.rec_user = u.user_id and rec_in 展开全文
头像 烛少
发表于 2024-11-17 15:32:17
select avg(distinct score) avg_score from user_action_tb a join recommend_tb b on a.user_id=b.rec_user where a.hobby_l=b.rec_info_l
头像 牛码er
发表于 2024-11-02 11:20:53
select sum(score)/count(user_id) from (select t2.user_id,t2.score from recommend_tb t1 inner join user_action_tb t2 on t1.rec_user=t2.user 展开全文
头像 在发呆的华夫饼很冷艳
发表于 2024-12-11 16:41:12
select round(avg(score)) as avg_score from user_action_tb where hobby_l in ( select rec_info_l from recommend_tb where rec_user = user_id 展开全文
头像 牛客479560235号
发表于 2025-06-12 16:40:19
-- 逻辑拆解:先将两个表连接起来,再去判断推荐的内容是不是喜欢的内容 WITH concat_recommend AS( SELECT t1.rec_info_l,t1.rec_user,t2.hobby_l,t2.score FROM recommend_tb t1 IN 展开全文
头像 精致的艾伦在学习
发表于 2024-08-23 17:07:55
select avg(score) avg_score from (select rec_user,sum(case when rec_info_l=hobby_l then 1 else 0 end) acc,avg(score) score from recommend_tb t1 join u 展开全文