首页 > 试题广场 >

请写出计算粉丝ctr的sql语句

[编程题]请写出计算粉丝ctr的sql语句
  • 热度指数:15564 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
现有下列三张表,创作者和粉丝关系表a,创作者和内容关系表b,粉丝在内容上的行为明细表c,现在想统计出所有粉丝CTR,请写出对应的SQL语句。
注:CTR为点击率,等于“作者对应的粉丝总阅读次数/作者对应的粉丝总曝光次数”。(只统计粉丝的,文章下面的非作者粉丝阅读和曝光不计数)

创作者和粉丝关系表
author_id fans_id create_date
332579 985035 2022/1/1
332579 849602 2022/1/15
332579 952566 2022/3/20
970382 930554 2022/6/1
970382 985035 2022/9/23
960725 590742 2022/11/10
960725 985035 2022/12/6
960725 940672 2023/1/12
960725 392056 2023/2/10

创作者和内容关系表
author_id content_id
332579 790046624
332579 391056935
970382 486962456
970382 359325633
970382 899054463
960725 125225355
490626 738258392
490626 678329246
230563 239587593

粉丝在内容上的行为明细表
content_id fans_id show_num read_num like_num comment_num
790046624 985035 1 1 0 0
790046624 583951 1 1 0 0
391056935 123573 1 1 0 1
391056935 395621 1 1 0 1
391056935 985035 2 1 0 1
486962456 985035 1 1 1 1
486962456 838495 1 1 1 1
359325633 952566 2 0 0 0
899054463 952566 1 0 0 0
125225355 985035 1 1 1 0
输出示例
fans_ctr
0.8000

示例1

输入

drop table if exists a;
create table `a` (
author_id varchar(32) not null,
fans_id varchar(32) not null,
create_date varchar(32) not null
);
insert into a values ('332579','985035','2022/1/1');
insert into a values ('332579','849602','2022/1/15');
insert into a values ('332579','952566','2022/3/20');
insert into a values ('970382','930554','2022/6/1');
insert into a values ('970382','985035','2022/9/23');
insert into a values ('960725','590742','2022/11/10');
insert into a values ('960725','985035','2022/12/6');
insert into a values ('960725','940672','2023/1/12');
insert into a values ('960725','392056','2023/2/10');


drop table if exists b;
create table `b` (
author_id varchar(32) not null,
content_id varchar(32) not null
);
insert into b values ('332579','790046624');
insert into b values ('332579','391056935');
insert into b values ('970382','486962456');
insert into b values ('970382','359325633');
insert into b values ('970382','899054463');
insert into b values ('960725','125225355');
insert into b values ('490626','738258392');
insert into b values ('490626','678329246');
insert into b values ('230563','239587593');


drop table if exists c;
create table `c` (
content_id varchar(32) not null,
fans_id varchar(32) not null,
show_num int not null,
read_num int not null,
like_num int not null,
comment_num int not null
);
insert into c values ('790046624','985035',1,1,0,0);
insert into c values ('790046624','583951',1,1,0,0);
insert into c values ('391056935','123573',1,1,0,1);
insert into c values ('391056935','395621',1,1,0,1);
insert into c values ('391056935','985035',2,1,0,1);
insert into c values ('486962456','985035',1,1,1,1);
insert into c values ('486962456','838495',1,1,1,1);
insert into c values ('359325633','952566',2,0,0,0);
insert into c values ('899054463','952566',1,0,0,0);
insert into c values ('125225355','985035',1,1,1,0);

输出

fans_ctr
0.8000
头像 牛客题解官
发表于 2025-03-14 12:02:07
精华题解 这道题目要求我们计算粉丝的点击率(CTR),我们要做的事情如下: 1. 确定总体问题 我们需要计算粉丝的CTR,即粉丝对内容的总阅读次数与总曝光次数的比值,公式为:CTR = 总阅读次数 / 总曝光次数。 2. 分析关键问题 连接表:将三个表连接起来,以便获取每个粉丝对内容的行为数据。 计算总阅读 展开全文
头像 主动的牛油果bbq了
发表于 2024-12-24 19:10:58
select sum(read_num)/sum(show_num)as fans_ctr from c left join b on c.content_id=b.content_id where (author_id,fans_id) in (select author_id,fans_id 展开全文
头像 我有明珠一颗
发表于 2025-07-17 15:10:08
select sum(read_num)/sum(show_num) as fans_ctr from a join b using(author_id) join c using(content_id, fans_id) 用 using 会很简洁
头像 ACM摸鱼侠
发表于 2025-02-20 09:51:30
select sum(read_num)/sum(show_num) as fans_ctr from a join b on a.author_id = b.author_id join c on a.fans_id = c.fans_id and b.content_i 展开全文
头像 在思考的六边形战士很想去旅行
发表于 2025-08-04 19:40:20
# 链式关联 select round(sum(read_num) / sum(show_num), 4) as fans_ctr from c inner join b on c.content_id = b.content_id inner join a on 展开全文
头像 刷牛客的coder很爱吃香菜
发表于 2025-02-13 13:35:38
select sum(read_num) / sum(show_num) fans_ctr from c join b on c.content_id = b.content_id where (author_id, fans_id) in ( sel 展开全文
头像 准备进厂的芹菜很伟大
发表于 2025-04-15 20:52:54
SELECT SUM(read_num)/SUM(show_num) AS fans_ctr FROM b join a on b.author_id=a.author_id join c on b.content_id = c.content_id WHERE a.fans_id 展开全文
头像 JJJENNN
发表于 2026-02-24 19:07:27
select round(sum(c.read_num) / sum(c.show_num),4) as fans_ctr from a join b using (author_id) join c using (content_id) where a.fans_id = c.fans_i 展开全文
头像 谦虚的比尔在炒股
发表于 2025-06-15 10:17:53
select sum(c.read_num) / sum(c.show_num) as fans_ctr from ( select b.content_id, a.fans_id from b lef 展开全文
头像 什么奇怪泡芙口味
发表于 2025-05-28 13:25:33
SELECT SUM(read_num)/SUM(show_num) fans_ctr FROM b left join a on a.author_id=b.author_id inner join c on b.content_id=c.content_id and a.fans_id=c.f 展开全文
头像 牛客907689258号
发表于 2026-01-14 09:08:52
select sum(read_num)/sum(show_num) as fans_ctr from a join b using(author_id) join c using(content_id, fans_id)