优化成MYSQL 脚本SELECT 子品牌, 商品数字ID, COUNT(DISTINCT o.用户id) AS new_customer_num, SUM(o.商品实付金额) AS new_customer_商品实付金额 FROM 天猫官旗有效数据 o LEFT JOIN ( -- 找到22年10月30日前有购买行为的客户编号 SELECT 用户id FROM 天猫官旗有效数据 WHERE 支付日期 BETWEEN '2021-10-31' AND '2022-10-30' GROUP BY 用户id ) old_c ON o.用户id = old_c.用户id WHERE o.支付日期 >= '2022-10-31' AND o.支付日期 <= '2022-11-11' AND NOT EXISTS ( SELECT 1 FROM 天猫官旗有效数据 WHERE 用户id = o.用户id AND 支付日期 BETWEEN '2021-10-31' AND '2022-10-30') GROUP BY GROUPING SETS ((子品牌, 商品数字ID))
时间: 2024-01-24 15:17:55 浏览: 189
以下是优化后的MYSQL脚本:
SELECT
子品牌,
商品数字ID,
COUNT(DISTINCT CASE WHEN o.支付日期 >= '2022-10-31' AND o.支付日期 <= '2022-11-11' AND old_c.用户id IS NULL THEN o.用户id ELSE NULL END) AS new_customer_num,
SUM(CASE WHEN o.支付日期 >= '2022-10-31' AND o.支付日期 <= '2022-11-11' AND old_c.用户id IS NULL THEN o.商品实付金额 ELSE 0 END) AS new_customer_商品实付金额
FROM 天猫官旗有效数据 o
LEFT JOIN (
SELECT 用户id
FROM 天猫官旗有效数据
WHERE 支付日期 BETWEEN '2021-10-31' AND '2022-10-30'
GROUP BY 用户id
) old_c ON o.用户id = old_c.用户id
WHERE o.支付日期 >= '2022-10-31' AND o.支付日期 <= '2022-11-11'
GROUP BY 子品牌, 商品数字ID;
这里进行了以下优化:
1. CASE语句替代NOT EXISTS子查询,提高查询效率。
2. 将GROUPING SETS修改为普通的GROUP BY语句,简化查询语句。
3. 将条件判断移动到CASE语句中,减少不必要的计算。
阅读全文