千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 用户累计销量面试题

用户累计销量面试题

来源:千锋教育
发布人:wjy
时间: 2022-06-07 13:35:00 1654580100

今天给大家准备的面试题解答的题目如下:

图片1

我们同样先根据需求构造表

create table sale_order(
id int primary key auto_increment comment '订单编号',
sale_dt date comment '订单日期',
user_id int comment '用户id',
sku_id int comment '商品id',
sale_count int comment '销售数量',
price int comment '商品单价',
amount int comment '销售金额'
);

insert into sale_order values
(1, '2019-01-01', 1, 1001, 2, 100, 200),
(2, '2019-01-02', 2, 1001, 1, 100, 100),
(3, '2019-02-10', 3, 1002, 2, 50, 100),
(4, '2019-02-11', 2, 1001, 2, 100, 200),
(5, '2019-03-01', 3, 1001, 1, 100, 100),
(6, '2019-03-01', 3, 1002, 1, 50, 50),
(7, '2019-03-02', 3, 1003, 4, 100, 400);
select * from sale_order;

create table products(
sku_id int primary key comment '商品id',
sku_name varchar(100) comment '商品名称'
);

insert into products values(1001, '商品1'), (1002, '商品2'),(1003, '商品3');

按照需求完成代码书写

/*
需求1:求每个月份的销量 销售额
  月份 销量 销售额
 2019-01    3        300
 2019-02    4        300
 2019-03    6        550   
*/
-- 根据月份分组 对销量  销售额求和  这里需要时间函数对时间格式化
select date_format(sale_dt, '%Y-%m') `月份`,
sum(sale_count) `销量`,
sum(amount) `销售额`
from sale_order group by date_format(sale_dt, '%Y-%m');

/*
需求2: 每个用户各个月份的销售额
user_id 2019-01      2019-02    2019-03
  1           200           0          0
  2           100           200        0
  3           0             100        550
*/
-- 先判断月份对应的数据 是否有销售额 有就设置为销售额  没有就设置为0  最后根据用户归类 销售额求和
select user_id,
sum(if(date_format(sale_dt, '%Y-%m') = '2019-01', amount, 0)) `2019-01`,
sum(if(date_format(sale_dt, '%Y-%m') = '2019-02', amount, 0)) `2019-02`,
sum(if(date_format(sale_dt, '%Y-%m') = '2019-03', amount, 0)) `2019-03`
from sale_order
group by user_id;


/*
需求3: 月份之间的累计销量 与 累计销售额
  月份 累计销量 累计销售额
 2019-01    3        300
 2019-02    7        600
 2019-03    13       1150
*/
-- 关于累计的问题 我们需要知道sum的应用
/*
1. 不在分组中使用 获取指定字段所有行的求和
2. 在分组中 是按照分类字段的值  将统计到的行中对应的字段的值求和 【分组会折叠 把折叠的行中指定字段的数据 求和】
3. sum还可以在窗口函数来用  
sum(字段名) over(partition by 归类字段)  
--- 如果是这样使用的话 在查询中增加一列 根据归类字段把数据整合并行排放的多行中
显示的是根据归类字段对字段的求和
不会折叠数据  这个因为没有排序 只有归类  求的就是归类完成之后 该字段的对应的所有行求和的结果
4. sum还可以在窗口函数来用
sum(字段名) over(partition by 归类字段 order by 排序字段)  
--- 如果是这样使用的话 在查询中增加一列 根据归类字段把数据整合在并行排放的多行中
并按照排序字段把数据排序好, 完成的是该归类字段下 当前行以上数据的累加和
*/
-- 在需求1的基础上 按照年归类 按照月份升序排序  使用sum窗口函数进行累计
select `月份`,
sum(`销量`) over(partition by substr(`月份`, 1, 4) order by substr(`月份`, 6)) as 累计销量,
sum(`销售额`) over(partition by substr(`月份`, 1, 4) order by substr(`月份`, 6)) as 累计销售额
from (select date_format(sale_dt, '%Y-%m') `月份`,
sum(sale_count) `销量`,
sum(amount) `销售额`
from sale_order group by date_format(sale_dt, '%Y-%m')) as t;

/*
需求4: 每个产品的销量与销售额 并给出排名
*/
-- 连接两表 按照商品分组 求和
select products.*, sum(sale_count) 销量, sum(amount) 销售额
from sale_order join products
on sale_order.sku_id = products.sku_id
group by sku_id;

 

更多关于python培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT