首页 > 试题广场 >

某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级

[编程题]某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级
  • 热度指数:28313 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
现有某乎问答创作者信息表author_tb如下(其中author_id表示创作者编号、author_level表示创作者级别,共1-6六个级别、sex表示创作者性别):
author_id author_level sex
101 6 m
102 1 f
103 1 m
104 3 m
105 4 f
106 2 f
107 2 m
108 5 f
109 6 f
110 5 m
创作者回答情况表answer_tb如下(其中answer_date表示创作日期、author_id指创作者编号、issue_id指回答问题编号、char_len表示回答字数):
answer_date author_id issue_id char_len
2021-11-01 101 E001 150
2021-11-01
101 E002 200
2021-11-01
102 C003 50
2021-11-01
103 P001 35
2021-11-01
104 C003 120
2021-11-01
105 P001 125
2021-11-01
102 P002 105
2021-11-02
101 P001 201
2021-11-02
110 C002 200
2021-11-02
110 C001 225
2021-11-02
110 C002 220
2021-11-03
101 C002 180
2021-11-04
109 E003 130
2021-11-04
109 E001 123
2021-11-05
108 C001 160
2021-11-05
108 C002 120
2021-11-05
110 P001 180
2021-11-05
106 P002 45
2021-11-05
107 E003 56
请你统计最大连续回答问题的天数大于等于3天的用户及其等级(若有多条符合条件的数据,按author_id升序排序),以上例子的输出结果如下:
author_id author_level
days_cnt
101 6 3
示例1

输入

drop table if exists author_tb;
CREATE TABLE author_tb(
author_id int(10) NOT NULL, 
author_level int(10) NOT NULL,
sex char(10) NOT NULL);
INSERT INTO author_tb VALUES(101 , 6, 'm');
INSERT INTO author_tb VALUES(102 , 1, 'f');
INSERT INTO author_tb VALUES(103 , 1, 'm');
INSERT INTO author_tb VALUES(104 , 3, 'm');
INSERT INTO author_tb VALUES(105 , 4, 'f');
INSERT INTO author_tb VALUES(106 , 2, 'f');
INSERT INTO author_tb VALUES(107 , 2, 'm');
INSERT INTO author_tb VALUES(108 , 5, 'f');
INSERT INTO author_tb VALUES(109 , 6, 'f');
INSERT INTO author_tb VALUES(110 , 5, 'm');

drop table if exists answer_tb;
CREATE TABLE answer_tb(
answer_date date NOT NULL, 
author_id int(10) NOT NULL,
issue_id char(10) NOT NULL,
char_len int(10) NOT NULL);
INSERT INTO answer_tb VALUES('2021-11-1', 101, 'E001' ,150);
INSERT INTO answer_tb VALUES('2021-11-1', 101, 'E002', 200);
INSERT INTO answer_tb VALUES('2021-11-1',102, 'C003' ,50);
INSERT INTO answer_tb VALUES('2021-11-1' ,103, 'P001', 35);
INSERT INTO answer_tb VALUES('2021-11-1', 104, 'C003', 120);
INSERT INTO answer_tb VALUES('2021-11-1' ,105, 'P001', 125);
INSERT INTO answer_tb VALUES('2021-11-1' , 102, 'P002', 105);
INSERT INTO answer_tb VALUES('2021-11-2',  101, 'P001' ,201);
INSERT INTO answer_tb VALUES('2021-11-2',  110, 'C002', 200);
INSERT INTO answer_tb VALUES('2021-11-2',  110, 'C001', 225);
INSERT INTO answer_tb VALUES('2021-11-2' , 110, 'C002', 220);
INSERT INTO answer_tb VALUES('2021-11-3', 101, 'C002', 180);
INSERT INTO answer_tb VALUES('2021-11-4' ,109, 'E003', 130);
INSERT INTO answer_tb VALUES('2021-11-4', 109, 'E001',123);
INSERT INTO answer_tb VALUES('2021-11-5', 108, 'C001',160);
INSERT INTO answer_tb VALUES('2021-11-5', 108, 'C002', 120);
INSERT INTO answer_tb VALUES('2021-11-5', 110, 'P001', 180);
INSERT INTO answer_tb VALUES('2021-11-5' , 106, 'P002' , 45);
INSERT INTO answer_tb VALUES('2021-11-5' , 107, 'E003', 56);

输出

101|6|3
头像 骨碌圆
发表于 2022-02-11 11:25:36
这道题我觉得没有说清楚, days_cnt到底是啥? 是连续回答天数中最大的那天? 还是回答天数的总和? 这不重要,只是连续签到问题的延伸,无非加几张表而已 思路重点,在于计算连续签到的天数, 【核心思想】在于如果连续签 展开全文
头像 牛客943886824号
发表于 2021-12-10 17:40:18
首先我们要了解如何去判断连续天数,如果是连续的日期,那么日期-日期对应的行数,所求出的日期是一样的值,基于这个可以找出 连续3天回答问题的用户, select answer_date,author_id,       &nb 展开全文
头像 牛客420100019号
发表于 2021-12-24 16:27:40
题目:请你统计最大连续回答问题的天数大于等于3天的用户及其等级 最大连续天数问题,求解通用思路:     是否连续例如1.11、1.12、1.12、1.13、1.15,序号(dense_rank)分别为1、2、2、3、4,日期数-序号分别为1. 展开全文
头像 盐咸咸
发表于 2022-04-12 12:51:12
1)建立子查询:先关联author_tb表,获取用户的author_level字段,并对用户每天的回答进行去重排序。 SELECT DISTINCT author_id,answer_date,author_level,DENSE_RANK()OVER(PARTITION&n 展开全文
头像 通辽可汗克鸽勃
发表于 2021-12-24 14:00:40
如何求连续打卡,以及连续签到得金币等问题就是用打卡日期减去该日期的排名,相减相同的为一个连续打卡的分组,然后记数即可 select id.author_id,author_level,cnt from ( SELECT author_id,first_day,count(distinct answe 展开全文
头像 宇宙最强超级无敌暴龙战神
发表于 2023-06-26 14:27:58
with tab as( select *,ROW_NUMBER()over(partition by author_id order by rk3) as days from( SELECT answer_date,author_id ,date_sub(answer 展开全文
头像 亲爱的暴躁的热心网友皮皮文
发表于 2021-12-18 21:17:17
主要信息 author_tb如下(其中author_id表示创作者编号、author_level表示创作者级别,共1-6六个级别):answer_tb如下(其中answer_date表示创作日期、author_id指创作者编号、issue_id指回答问题编号): 最大连续回答问题的天数大于等于3天 展开全文
头像 Pandolar
发表于 2022-01-13 17:36:13
with t1 as ( select a.author_id, answer_date, if(lag(date_add(answer_date, INTERVAL 2 DAY), 2) over (partition by a.author_i 展开全文
头像 酸菜鱼土豆大侠
发表于 2022-11-01 23:34:24
【场景】:连续记录 【分类】:分组条件查询、窗口函数 分析思路 难点: 1.如何表示连接?连续的表示: 日期减去排序的值相等 2.记得先对日期、用户去重 (1)对日期、创作者进行去重 [使用]:distinct (2)统计日期、创作者、日期减去排序的值(连续签到) 连续的表示: 日期减去排序 展开全文
头像 风雪行
发表于 2023-01-02 10:49:41
连续回答问题天数,连续签到天数等等,固定思路:使用窗口函数,根据用户分组,日期进行排序构造新列a,同时对原数据进行去重,每天每个用户只要保留一条记录,然后时间列和a列相减得到新列b,如此一来只要是连续答题,或签到。那么相减后得到的值相同。最后再根据用户id和b列分组计数就可以得到连续答题的天数了。 展开全文

问题信息

难度:
211条回答 1988浏览

热门推荐

通过挑战的用户

查看代码
  • 二维码

    扫描二维码,关注牛客网

  • 二维码

    下载牛客APP,随时随地刷题