首页 > 试题广场 >

统计2021年10月每个退货率不大于0.5的商品各项指标

[编程题]统计2021年10月每个退货率不大于0.5的商品各项指标
  • 热度指数:62907 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

现有用户对展示的商品行为表tb_user_event

id uid product_id event_time if_click if_cart if_payment if_refund
1 101 8001 2021-10-01 10:00:00 0 0 0 0
2 102 8001
2021-10-01 10:00:00
1 0 0 0
3 103 8001
2021-10-01 10:00:00
1 1 0 0
4 104 8001
2021-10-02 10:00:00
1 1 1 0
5 105 8001
2021-10-02 10:00:00
1 1 1 0
6 101 8002
2021-10-03 10:00:00
1 1 1 0
7 109 8001
2021-10-04 10:00:00
1 1 1 1
(uid-用户ID, product_id-商品ID, event_time-行为时间, if_click-是否点击, if_cart-是否加购物车, if_payment-是否付款, if_refund-是否退货退款)

问题:请统计2021年10月每个有展示记录的退货率不大于0.5的商品各项指标,

  • 商品点展比=点击数÷展示数;
  • 加购率=加购数÷点击数;
  • 成单率=付款数÷加购数;退货率=退款数÷付款数,
  • 当分母为0时整体结果记为0,结果中各项指标保留3位小数,并按商品ID升序排序。

输出示例
示例数据的输出结果如下

product_id ctr cart_rate payment_rate refund_rate
8001 0.833 0.800 0.750 0.333
8002 1.000 1.000 1.000 0.000

解释:
在2021年10月商品8001被展示了6次,点击了5次,加购了4次,付款了3次,退款了1次,因此点击率为5/6=0.833,加购率为4/5=0.800,
成单率为3/4=0.750,退货率为1/3=0.333(保留3位小数);
示例1

输入

DROP TABLE IF EXISTS tb_user_event;
CREATE TABLE tb_user_event (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid INT NOT NULL COMMENT '用户ID',
    product_id INT NOT NULL COMMENT '商品ID',
    event_time datetime COMMENT '行为时间',
    if_click TINYINT COMMENT '是否点击',
    if_cart TINYINT COMMENT '是否加购物车',
    if_payment TINYINT COMMENT '是否付款',
    if_refund TINYINT COMMENT '是否退货退款'
) CHARACTER SET utf8 COLLATE utf8_bin;

INSERT INTO tb_user_event(uid, product_id, event_time, if_click, if_cart, if_payment, if_refund) VALUES
  (101, 8001, '2021-10-01 10:00:00', 0, 0, 0, 0),
  (102, 8001, '2021-10-01 10:00:00', 1, 0, 0, 0),
  (103, 8001, '2021-10-01 10:00:00', 1, 1, 0, 0),
  (104, 8001, '2021-10-02 10:00:00', 1, 1, 1, 0),
  (105, 8001, '2021-10-02 10:00:00', 1, 1, 1, 0),
  (101, 8002, '2021-10-03 10:00:00', 1, 1, 1, 0),
  (109, 8001, '2021-10-04 10:00:00', 1, 1, 1, 1);

输出

8001|0.833|0.800|0.750|0.333
8002|1.000|1.000|1.000|0.000
头像 webary
发表于 2021-12-05 15:17:42
统计2021年10月每个退货率不大于0.5的商品的各项指标 明确题意: 统计2021年10月每个有展示记录的退货率不大于0.5商品的各项指标: 商品点展比=点击数÷展示数;加购率=加购数÷点击数;成单率=付款数÷加购数;退货率=退款数÷付款数,当分母为0时整体结果记为0。 结果中各项指标保留3位小数 展开全文
头像 阿翟啊
发表于 2021-12-01 11:49:20
select product_id, round(sum(if_click)/count(1),3) ctr, round(sum(if_cart)/sum(if_click),3) cart_rate, round(sum(if_payment)/sum( 展开全文
头像 牛客368501572号
发表于 2021-12-15 19:59:08
ifnull() 考虑分为为0 的情况,在本题中不加也没有问题 select     product_id,  ifnull(round(sum(if_click)/ count(id),3),0) ctr,  if 展开全文
头像 通辽可汗克鸽勃
发表于 2021-12-14 16:11:41
比较简单的题,子查询计数,然后进行统计清晰明了,要注意筛查分母为0 的情况 SELECT product_id,round(click/showtimes,3) as ctr, if(click=0,0,round(cart/click,3)), if(cart=0,0, 展开全文
头像 牛客796304033号
发表于 2022-02-28 10:09:12
此题共包含一张表: 表1:tb_user_event 要解决的问题: 问题:请统计2021年10月每个有展示记录的退货率不大于0.5的商品各项指标, 解题思路: 每个有展示记录的商品的各项指标,当分母为0时整体结果记为0,结果中各项指标保留3位小数 展示记录=product_id出现的次数 退 展开全文
头像 牛客40605318号
发表于 2022-06-18 23:59:35
select product_id, round(if(count()!=0,sum(if_click)/count(),0),3) as ctr, round(if(sum(if_click)!=0,sum(if_cart)/sum(if_click),0),3) as cart_rate, ro 展开全文
头像 无上清颜
发表于 2021-12-23 10:10:01
select product_id,round(sum(if_click)/count(1),3) as ctr ,round(sum(if_cart)/sum(if_click),3) as cart_rate ,round(su 展开全文
头像 酸菜鱼土豆大侠
发表于 2022-11-06 23:14:02
【场景】:分组求和 【分类】:分组查询 分析思路 select 查询结果 [产品ID;点击率;加购率;成单率;退货率] from 从哪张表中查询数据[用户行为表] where 查询条件 [2021年10月] group by 分组条件 [产品ID] order by 对查询结果排序 [产品ID升序] 展开全文
头像 牛客681091348号
发表于 2023-02-10 22:34:45
SELECT product_id, FORMAT(IFNULL(SUM(if_click)/NULLIF(COUNT(*),0),0),3) as ctr, FORMAT(IFNULL(SUM(if_cart)/NULLIF(SUM(if_click),0),0),3) as cart_rate, 展开全文
头像 有什么的吗?
发表于 2022-04-20 12:32:27
SELECT a.product_id, if( show_cnt=0,0,round(sum(if_click)/show_cnt,3 )) as ctr, if( sum(if_click)=0,0,round(sum(if_cart)/sum(if_click),3) ) a 展开全文