WITH t1 AS ( -- 公共宽表 SELECT a.order_id, a.product_id, a.cnt, b.uid, a.price * a.cnt AS less_amount, b.event_time, b.total_amount, b.status, c.shop_id, c.release_time FROM tb_order_detail a LEFT JOIN tb_order_overall b ON a.order_id = b.order_id LEFT JOIN tb_product_info c ON a.product_id = c.product_id WHERE status = 1 ), t2 AS ( -- 2021-09-25 到 2021-10-01 901上架产品 SELECT count(distinct product_id) AS total_one FROM tb_product_info where DATE(release_time) <= '2021-10-01' AND shop_id = 901 ), t3 AS ( -- 2021-09-26 到 2021-10-02 901上架产品 SELECT count(distinct product_id) AS total_two FROM tb_product_info where DATE(release_time) <= '2021-10-02' AND shop_id = 901 ), t4 AS ( -- 2021-09-27 到 2021-10-03 901上架产品 SELECT count(distinct product_id) AS total_three FROM tb_product_info where DATE(release_time) < '2021-10-03' AND shop_id = 901 ), t5 AS (-- 901 第一阶段销售 SELECT count(distinct product_id) AS buy_one, MAX(total_one) AS total_one FROM t1 JOIN t2 WHERE DATE(event_time) BETWEEN '2021-09-25' AND '2021-10-01' AND shop_id = 901 AND cnt > 0 ), t6 AS ( -- 901 第二阶段销售 SELECT count(distinct product_id) AS buy_two, MAX(total_two) AS total_two FROM t1 JOIN t3 WHERE DATE(event_time) BETWEEN '2021-09-26' AND '2021-10-02' AND shop_id = 901 AND cnt > 0 ), t7 AS ( -- 901 第三阶段销售 SELECT count(distinct product_id) AS buy_three, MAX(total_three) AS total_three FROM t1 JOIN t4 WHERE DATE(event_time) BETWEEN '2021-09-27' AND '2021-10-03' AND shop_id = 901 AND cnt > 0 ), t8 AS ( -- 所有商店第一阶段 SELECT count(distinct product_id) AS buy_all_one FROM t1 WHERE DATE(event_time) = '2021-10-01' AND cnt >0 ), t9 AS ( -- 所有商店第二阶段 SELECT count(distinct product_id) AS buy_all_two FROM t1 WHERE DATE(event_time) = '2021-10-02' AND cnt > 0 ), t10 AS ( -- 所有商店第三阶段 SELECT count(distinct product_id) AS buy_all_three FROM t1 WHERE DATE(event_time) = '2021-10-03' AND cnt > 0 ), t11 AS ( SELECT * FROM t5 JOIN t8 ), t12 AS ( SELECT * FROM t6 JOIN t9 ), t13 AS ( SELECT * FROM t7 JOIN t10 ), t14 AS ( SELECT IF(buy_all_one = 0, 'Miss' ,'2021-10-01') AS dt, ROUND(IFNULL(buy_one / total_one, 0), 3) AS sale_rate, 1 - ROUND(IFNULL(buy_one / total_one, 0), 3) AS unsale_rate FROM t11 UNION ALL SELECT IF(buy_all_two = 0, 'Miss' ,'2021-10-02') AS dt, ROUND(IFNULL(buy_two / total_two, 0), 3) AS sale_rate, 1 - ROUND(IFNULL(buy_two / total_two, 0), 3) AS unsale_rate FROM t12 UNION ALL SELECT IF(buy_all_three = 0, 'Miss' ,'2021-10-03') AS dt, ROUND(IFNULL(buy_three / total_three, 0), 3) AS sale_rate, 1 - ROUND(IFNULL(buy_three / total_three, 0), 3) AS unsale_rate FROM t13 ) SELECT * FROM t14 WHERE dt != 'Miss'; # 这道题的关键在于 “只要当天任一店铺有任何商品的销量就输出该天的结果” ,这里的当天是指1-2-3三天的时间!