目录
-
- (1)查询每个区域的用户数
- (2)查询每个区域的男女用户数
- (3)查询姓张的用户数
- (4)筛选出id3~id5的用户
- (5)筛选出绩效不达标的员工
- (6)筛选出姓张的且绩效不达标的员工
- (7)查询获得销售冠军超过两次的人
- (8)查询某部门一年的月销售额最高涨幅
- (9)查询每个季度绩效得分大于70分的员工
- (10)删除重复值
- (11)行列互换
- (12)多列比较
- (13)对成绩进行分组
- (14)周累计数据获取
- (15)周环比数据获取
- (16)查询获奖员工信息
- (17)计算用户留存情况
- (18)筛选最受欢迎的课程
- (19)筛选出每个年级最受欢迎的三门课程
- (20)求累积和
- (21)获取新增用户数
- (22)获取用户首次购买时间
- (23)同时获取用户和订单数据
- (24)随机抽样
- (25)获取沉默用户数
- (26)获取新用户的订单数
- (27)获取借款到期名单
- (28)获取即将到期的借款信息
- (29)获取历史逾期借款信息
- (30)获取部门工资最高的员工
- (补)求连续登陆三天的用户
- (补)某互联网公司面试题
开发工具:
- mysql-8.0
- DataGrip
(1)查询每个区域的用户数
数据源:stu_table.csv
id,name,class,sex
4,张文华,二区,男
3,李思雨,一区,女
1,王小凤,一区,女
7,李智瑞,三区,男
6,徐文杰,二区,男
8,徐雨秋,三区,男
5,张青云,二区,女
9,孙皓然,三区,男
10,李春山,三区,男
2,刘诗迪,一区,女
需求:我们想知道每个区域有多少用户
解题思路:首先需要对区域进行分组,使用的是group by,然后对每个组内的用户进行计数聚合运算,使用的是count,最后运行结果如下表所示。
select
class,
count(id) as stu_sum
from
test.stu_table
group by
class;
运行结果:
(2)查询每个区域的男女用户数
数据源:stu_table.csv
需求:我们想知道每个区域内男生、女生分别有多少个。
-- 2.查询每个区域的男女用户数
-- 写法一
select class,sex,count(sex) from test.stu_table group by class,sex;
-- 写法二
select
class ,
count(case when sex = '男' then class end ) as '男',
count(case when sex = '女' then class end ) as '女'
from
test.stu_table
group by class;
-- 写法三
select
sex ,
count(case when class = '一区' then sex end ) as '一区',
count(case when class = '二区' then sex end ) as '二区',
count(case when class = '三区' then sex end ) as '三区'
from
test.stu_table
group by sex;
运行结果:
(3)查询姓张的用户数
数据源:stu_table.csv
需求:我们想知道这张表中姓张的用户有多少个?
select
count(id) as stu_num
from
test.stu_table
where name like '张%';
运行结果:
(4)筛选出id3~id5的用户
数据源:stu_table.csv
需求:我们想要获取id按照从小到大的顺序排列以后id3~id5的用户的信息。
-- 4.筛选出id3~id5的用户
select * from test.stu_table order by id limit 2,3;
运行结果:
(5)筛选出绩效不达标的员工
数据源:score_table.csv
id,namr,group,score
1,王小凤,一部,88
2,刘诗迪,一部,70
3,李思雨,一部,92
4,张文华,二部,55
5,张青云,二部,77
6,徐文杰,二部,77
7,李智瑞,三部,56
8,徐雨秋,三部,91
9,孙皓然,三部,93
10,李春山,三部,57
需求:我们想把绩效不达标(绩效得分小于60分)的员工的信息筛选出来。
select * from test.score_table where score < 60;
运行结果:
(6)筛选出姓张的且绩效不达标的员工
数据源:score_table.csv
需求:我们现在想根据这张表筛选出姓张的且绩效不达标的员工的信息。
-- 6.筛选出姓张的且绩效不达标的员工
select * from test.score_table where score < 60 and name like '张%';
运行结果:
(7)查询获得销售冠军超过两次的人
数据源:month_table.csv
id,name,month_num
E002,王小凤,1
E001,张文华,2
E003,孙皓然,3
E001,张文华,4
E002,王小凤,5
E001,张文华,6
E004,李智瑞,7
E002,王小凤,8
E003,孙皓然,9
需求:现在需要查询获得销售冠军的次数超过2次的人及其获得销售冠军的次数。
select
id,
name,
count(month_num) as num
from
test.month_table
group by
id,
name
having
num > 2;
运行结果:
(8)查询某部门一年的月销售额最高涨幅
数据源:sale_table.csv
year_num,month_num,sales
2019,1,2854
2019,2,4772
2019,3,3542
2019,4,1336
2019,5,3544
2018,1,2293
2018,2,2559
2018,3,2597
2018,4,2363
需求:现在我们想查询2019年的月销售额最高涨幅是多少。
select
year_num,
max(sales) as max_sales,
min(sales) as min_sales,
(max(sales) - min(sales)) as cha,
((max(sales) - min(sales)) / min(sales)) as growth
from
test.sale_table
group by
year_num;
运行结果:
(9)查询每个季度绩效得分大于70分的员工
数据源:score_info_table.csv
id,name,subject,score
1,王小凤,第一季度,88
1,王小凤,第二季度,55
1,王小凤,第三季度,72
3,徐雨秋,第一季度,92
3,徐雨秋,第二季度,77
3,徐雨秋,第三季度,93
2,张文华,第一季度,70
2,张文华,第二季度,77
2,张文华,第三季度,91
解题思路:我们要查询的是每个季度绩效得分都大于70分的员工,只要能够保证每个季度每位员工的最小绩效得分是大于70分的,就可以说明这位员工的每个季度绩效得分都大于70分。
需求:现在我们想要通过这张表查询每个季度绩效得分都大于70分的员工。
select
id,
name,
min(score) as min_score
from
test.score_info_table
group by
id,
name
having min_score > 70;
运行结果:
(10)删除重复值
数据源:stu_info_table.csv
id,name,t_1,t_2
1,王小凤,产品技术部,B端产品
2,刘诗迪,产品技术部,C端产品
3,李思雨,产品技术部,B端产品
5,张青云,销售运营部,数据分析
4,张文华,销售运营部,销售管理
6,徐文杰,销售运营部,销售管理
7,李智瑞,产品技术部,B端产品
8,徐雨秋,销售运营部,销售管理
9,孙皓然,产品技术部,B端产品
需求:现在我们想获取该公司一级部门及二级部门的信息,即哪些一级部门下包含哪些二级部门
select
t_1,
t_2
from
test.stu_info_table
group by
t_1,
t_2
order by t_1;
运行结果:
(11)行列互换
数据源:row_col_table.csv
year_num,month_num,sales
2019,1,100
2019,2,200
2019,3,300
2019,4,400
2020,1,200
2020,2,400
2020,3,600
2020,4,800
需求:我们需要把如上表所示的纵向存储数据的方式改成如下表所示的横向存储数据的方式。
解题思路:首先按照year_num分组,利用case when xxx then sales end条件控制语句,当month_num = 1时返回sales,以此类推,得到列值。
-- 11.行列互换
select * from test.row_col_table;
select year_num,
sum(case when month_num = 1 then sales end ) as m1,
sum(case when month_num = 2 then sales end ) as m2,
sum(case when month_num = 3 then sales end ) as m3,
sum(case when month_num = 4 then sales