首页 > 试题广场 >

店铺901国庆期间的7日动销率和滞销率

[编程题]店铺901国庆期间的7日动销率和滞销率
  • 热度指数:71270 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
商品信息表tb_product_info
id product_id
shop_id tag in_price
quantity release_time
1 8001 901 日用 60 1000 2020-01-01 10:00:00
2 8002 901 零食 140 500 2020-01-01 10:00:00
3 8003 901 零食 160 500 2020-01-01 10:00:00
(product_id-商品ID, shop_id-店铺ID, tag-商品类别标签, in_price-进货价格, quantity-进货数量, release_time-上架时间)

订单总表tb_order_overall

id order_id uid event_time total_amount total_cnt status
1 301004 102 2021-09-30 10:00:00 170 1 1
2 301005 104 2021-10-01 10:00:00
160 1 1
3 301003 101 2021-10-02 10:00:00
300 2 1
4 301002 102 2021-10-03 11:00:00
235 2 1
(order_id-订单号, uid-用户ID, event_time-下单时间, total_amount-订单总金额, total_cnt-订单商品总件数, status-订单状态)

订单明细表tb_order_detail

id order_id product_id price cnt
1 301004 8002 180 1
2 301005
8002
170 1
3 301002
8001
85
1
4 301002
8003
180 1
5 301003
8002
150 1
6 301003
8003
180 1
(order_id-订单号, product_id-商品ID, price-商品单价, cnt-下单数量)

问题请计算店铺901在2021年国庆头3天的7日动销率和滞销率,结果保留3位小数,按日期升序排序。

  • 动销率定义为店铺中一段时间内有销量的商品占当前已上架总商品数的比例(有销量的商品/已上架总商品数)。
  • 滞销率定义为店铺中一段时间内没有销量的商品占当前已上架总商品数的比例。(没有销量的商品/已上架总商品数)。
  • 只要当天任一店铺有任何商品的销量就输出该天的结果,即使店铺901当天的动销率为0。

输出示例
示例数据的输出结果如下:
dt sale_rate unsale_rate
2021-10-01 0.333 0.667
2021-10-02
0.667 0.333
2021-10-03
1.000 0.000
解释:
10月1日的近7日(9月25日---10月1日)店铺901有销量的商品有8002,截止当天在售商品数为3,动销率为0.333,滞销率为0.667;
10月2日的近7日(9月26日---10月2日)店铺901有销量的商品有8002、8003,截止当天在售商品数为3,动销率为0.667,滞销率为0.333
10月3日的近7日(9月27日---10月3日)店铺901有销量的商品有8002、8003、8001,截止当天店铺901在售商品数为3,动销率为1.000,
滞销率为0.000;
示例1

输入

DROP TABLE IF EXISTS tb_order_overall;
CREATE TABLE tb_order_overall (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    order_id INT NOT NULL COMMENT '订单号',
    uid INT NOT NULL COMMENT '用户ID',
    event_time datetime COMMENT '下单时间',
    total_amount DECIMAL NOT NULL COMMENT '订单总金额',
    total_cnt INT NOT NULL COMMENT '订单商品总件数',
    `status` TINYINT NOT NULL COMMENT '订单状态'
) CHARACTER SET utf8 COLLATE utf8_bin;

DROP TABLE IF EXISTS tb_product_info;
CREATE TABLE tb_product_info (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    product_id INT NOT NULL COMMENT '商品ID',
    shop_id INT NOT NULL COMMENT '店铺ID',
    tag VARCHAR(12) COMMENT '商品类别标签',
    in_price DECIMAL NOT NULL COMMENT '进货价格',
    quantity INT NOT NULL COMMENT '进货数量',
    release_time datetime COMMENT '上架时间'
) CHARACTER SET utf8 COLLATE utf8_bin;

DROP TABLE IF EXISTS tb_order_detail;
CREATE TABLE tb_order_detail (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    order_id INT NOT NULL COMMENT '订单号',
    product_id INT NOT NULL COMMENT '商品ID',
    price DECIMAL NOT NULL COMMENT '商品单价',
    cnt INT NOT NULL COMMENT '下单数量'
) CHARACTER SET utf8 COLLATE utf8_bin;

INSERT INTO tb_product_info(product_id, shop_id, tag, in_price, quantity, release_time) VALUES
  (8001, 901, '日用', 60, 1000, '2020-01-01 10:00:00'),
  (8002, 901, '零食', 140, 500, '2020-01-01 10:00:00'),
  (8003, 901, '零食', 160, 500, '2020-01-01 10:00:00');

INSERT INTO tb_order_overall(order_id, uid, event_time, total_amount, total_cnt, `status`) VALUES
  (301004, 102, '2021-09-30 10:00:00', 170, 1, 1),
  (301005, 104, '2021-10-01 10:00:00', 160, 1, 1),
  (301003, 101, '2021-10-02 10:00:00', 300, 2, 1),
  (301002, 102, '2021-10-03 11:00:00', 235, 2, 1);

INSERT INTO tb_order_detail(order_id, product_id, price, cnt) VALUES
  (301004, 8002, 180, 1),
  (301005, 8002, 170, 1),
  (301002, 8001, 85, 1),
  (301002, 8003, 180, 1),
  (301003, 8002, 150, 1),
  (301003, 8003, 180, 1);

输出

2021-10-01|0.333|0.667
2021-10-02|0.667|0.333
2021-10-03|1.000|0.000
头像 小摆锤
发表于 2022-02-11 20:38:11
感觉这六道题做了很久,每道题都很折磨。。。。。。 这道题我本来思路是想直接用窗口函数统计10-01到10-03每天最近7日有销量的商品数目,然后发现窗口函数不能用DISTINCT,只能用子查询搜索和每天相近七天有销量的商品数目。 第一个子查询对应查询每条record相距最近七天的产品,去重后输出 第 展开全文
头像 盐咸咸
发表于 2022-04-08 18:32:40
一、知识点梳理与拓展 从这一道真题,我所收获到的核心是各种表关联的用法。以前我常用到的表关联是:表1 JOIN 表2 ON 字段1=字段2 表关联的另2种用法: 用法1——这种用法可以适用于没有可直接用的关联字段情况   & 展开全文
头像 webary
发表于 2021-12-08 20:41:10
店铺901国庆期间的7日动销率和滞销率 明确题意: 计算店铺901在2021年国庆头3天的7日动销率和滞销率。结果保留3位小数,按日期升序排序。只要当天有任何商品的销量就输出该天的结果,即使店铺901当天的动销率为0。 动销率定义为店铺中一段时间内有销量的商品占当前已上架总商品数的比例,同理滞销率就 展开全文
头像 骨碌圆
发表于 2022-02-10 17:59:19
这题太让人崩溃了,来来回回折腾了五六个小时,算是解出了,但是效率和运行时间都不佳😰 有题目理解的不到位,也有思路卡壳的~~~及时现在写下思路,可能有的地方也表述不清楚 先mark,再看看各位大神的,看有没有更好解题思路 【问题】店铺901 国庆期间  展开全文
头像 一行代码&
发表于 2022-05-11 23:25:15
#没有复杂的语法开窗和case when,只需要其中一个部分就可以了 依次算出每天的动销率和滞销率 而且当天存在销量即可 不要复杂化问题! select y1,y2,y3 from( select '2021-10-01' y1,round(count(distinct(t1.product_id) 展开全文
头像 咖啡加不加糖
发表于 2021-12-10 21:52:41
select o7.date_time,o7.sale_rate,o7.unsale_rate from ( select distinct DATE_FORMAT(o5.event_time,'%Y-%m-%d') as event_time from 展开全文
头像 鸡乐鸡乐麦
发表于 2022-04-16 19:16:47
这道题应该是牛客网我目前做过的所有SQL练习题目最难的一题了,我一开始觉得无非就是到变种的连续登录题,想用 count(distinct product_id) over(partition by dt rows 6 preceding) 窗口函数做法来写,结果这个版本不支持。 这里多感谢 用户 展开全文
头像 Hoveii
发表于 2022-03-10 01:26:16
注意点 时间限定:国庆节头3天 计算指标:近7日动销率(1-滞销率) 因此,实际关注的时间范围是:国庆前6天+国庆头3天 核心字段:product_id, order_id, event_time, shop_id, shop_id 难点:近七日在售商品识别,已上架商品识别 坑点:当天任一店 展开全文
头像 BLAcKSQAoO
发表于 2021-12-04 13:44:33
第一眼看到这题,觉得这是一道滑动窗口统计,觉得总体思路基本遵循这题: https://blog.nowcoder.net/n/ed1e159ff8c84b7b8ddf4fd5c7a47c45 然而。。。这题很。。。恶心 恶心在哪? 我们能看到的数据是题目,以及自行测试的数据,最早到09.30,并没有 展开全文
头像 酸菜鱼土豆大侠
发表于 2022-11-06 23:51:54
【类型】:经典题时间段 【场景】:已知日期和天数,得到某时间段(某个日期7天内的时间段)的某些指标 【分类】:时间函数、多表连接 分析思路 难点: 1.如何处理“只要当天任一店铺有任何商品的销量就输出该天的结果,即使店铺901当天的动销率为0。”的条件 新学到: 不用窗口函数,而是利用条件来确定某 展开全文