当前位置:网站首页>SQL(面试实战07)
SQL(面试实战07)
2022-08-02 10:50:00 【m0_67401499】
1. 某乎问答11月份日人均回答量
现有某乎问答创作者回答情况表answer_tb如下(其中answer_date表示创作日期、author_id指创作者编号、issue_id表示问题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
请你统计11月份日人均回答量(回答问题数量/答题人数),按回答日期排序,结果保留两位小数,以上例子的输出结果如下:
answer_date
per_num
2021-11-01
1.40
2021-11-02
2.00
2021-11-03
1.00
2021-11-04
2.00
2021-11-05
1.25
示例1
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);
题解
select
answer_date,
round(count(issue_id)/count(distinct author_id),2) per_num
from answer_tb
group by answer_date
2. 某乎问答高质量的回答中用户属于各级别的数量
现有某乎问答创作者信息表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
回答字数大于等于100字的认为是高质量回答,请你统计某乎问答高质量的回答中用户属于1-2级、3-4级、5-6级的数量分别是多少,按数量降序排列,以上例子的输出结果如下:
level_cut
num
5-6级
12
3-4级
2
1-2级
1
示例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);
题解
select level_cut,count(*) num
from
(
select
author_id,author_level,issue_id,
case
when author_level <3 then "1-2级"
when author_level <5 then "3-4级"
else "5-6级"
end
level_cut
from
(
select author_id,author_level,issue_id
from author_tb
join answer_tb
using(author_id)
where char_len>=100
)t
)t1
group by level_cut
order by num desc
3. 某乎问答单日回答问题数大于等于3个的所有用户
现有某乎问答创作者回答情况表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
请你统计11月份单日回答问题数大于等于3个的所有用户信息(author_date表示回答日期、author_id表示创作者id,answer_cnt表示回答问题个数),以上例子的输出结果如下:
answer_date
author_id
answer_cnt
2021-11-02
110
3
注:若有多条数据符合条件,按answer_date、author_id升序排序。
示例1
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);
题解
select answer_date,author_id,count(*) answer_cnt
from answer_tb
group by answer_date,author_id
having answer_cnt>=3
order by answer_date,author_id
4. 某乎问答回答过教育类问题的用户里有多少用户回答过职场类问题
现有某乎问答题目信息表issue_tb如下(其中issue_id代表问题编号,issue_type表示问题类型):
issue_id
issue_type
E001
Education
E002
Education
E003
Education
C001
Career
C002
Career
C003
Career
C004
Career
P001
Psychology
P002
Psychology
创作者回答情况表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
请你统计回答过教育类问题的用户里有多少用户回答过职场类问题,以上例子的输出结果如下:
num
1
示例1
drop table if exists issue_tb;
CREATE TABLE issue_tb(
issue_id char(10) NOT NULL,
issue_type char(10) NOT NULL);
INSERT INTO issue_tb VALUES('E001' ,'Education');
INSERT INTO issue_tb VALUES('E002' ,'Education');
INSERT INTO issue_tb VALUES('E003' ,'Education');
INSERT INTO issue_tb VALUES('C001', 'Career');
INSERT INTO issue_tb VALUES('C002', 'Career');
INSERT INTO issue_tb VALUES('C003', 'Career');
INSERT INTO issue_tb VALUES('C004', 'Career');
INSERT INTO issue_tb VALUES('P001' ,'Psychology');
INSERT INTO issue_tb VALUES('P002' ,'Psychology');
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);
题解
select count(distinct author_id) num
from issue_tb t1
join answer_tb t2
on t1.issue_id=t2.issue_id
where issue_type = 'Career'
and author_id in (
select author_id
from issue_tb a
join answer_tb b
on a.issue_id=b.issue_id
where issue_type = 'Education'
)
5. 某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级
现有某乎问答创作者信息表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
题解
方式一:
-- 最大连续回答问题的天数大于等于3天的用户及其等级
select author_id,author_level,max(rk) days_cnt
from
(
select
author_id,author_level,dense_rank()over(partition by author_id,base_date order by answer_date) rk
from
(
select
author_id,author_level,answer_date,date_sub(answer_date, interval rk day) base_date
from
(
select
author_id,
author_level,
answer_date,
dense_rank()over(partition by author_id order by answer_date) rk
from author_tb
join answer_tb
using(author_id)
)t_rank
)t_row_rank
)t
where rk>=3
group by author_id,author_level
order by author_id
方式二:
select
author_id,author_level,count(distinct answer_date)days_count
from
(
select
author_id,
author_level,
answer_date,
dense_rank()over(partition by author_id order by answer_date) rk
from author_tb
join answer_tb
using(author_id)
)t_rank
group by author_id,author_level,DATE_ADD(answer_date, interval -rk day)
having days_count >=3
order by author_id
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
Failed to configure mysql, what's going on?
C#/VB.NET 添加多行多列图片水印到Word文档
阿里云数据存储生态计划发布,助力伙伴数据创新
10份重磅报告 — 展望中国数字经济未来
Jay Chou's new song is released, crawl the "Mojito" MV barrage, and see what the fans have to say!
21年毕业转行软件测试,从0收入到月薪过万,我真的很幸运...
一体化在线政务服务平台,小程序容器技术加速建设步伐
You Only Hypothesize Once: 用旋转等变描述子估计变换做点云配准(已开源)
X86函数调用模型分析
Oracle根据时间查询
随机推荐
The R language uses the ggtexttable function of the ggpubr package to visualize the table data (draw the table directly or add the table data to the image), set the theme parameter to customize the fi
LeetCode每日一练 —— 225. 用队列实现栈
ECCV22|PromptDet:无需手动标注,迈向开放词汇的目标检测
Event object, do you know it well?
LayaBox---TypeScript---高级类型
LayaBox - TypeScript - merge statement
鸿星尔克再捐一个亿
LayaBox---TypeScript---Mixins
行为型模式-模板方法模式
关于#oracle#的问题,如何解决?
MySQL模糊查询性能优化
R language time series data arithmetic operation: use the log function to log the time series data, and use the diff function to calculate the successive difference of the logarithmic time series data
LayaBox---TypeScript---Three slash instructions
Shell script realizes multi-select DNS simultaneous batch resolution of domain name IP addresses (new update)
云原生应用平台的核心模块有哪些
After 21 years of graduation, I switched to software testing. From 0 income to a monthly salary of over 10,000, I am really lucky...
ES2020-23简单易懂又实用的精选特性讲解 日常开发必备干货!
LayaBox---TypeScript---Advanced Type
外包学生管理系统架构文档
Oracle 单实例19.11升级到19.12