diff --git a/SQL.sql b/SQL.sql index cea31a0..a303508 100644 --- a/SQL.sql +++ b/SQL.sql @@ -1,26 +1,80 @@ -- 线上店铺年度销售金额、订单数量、退款金额、退款订单数、订单均价 SELECT - sales.store_code as '店铺编码', - year(sales.order_date) AS '年份', - round(sum(sales.order_settle_amt),2) as '销售金额', - COUNT(sales.platform_order_no) + - SUM(LENGTH(sales.platform_order_no) - LENGTH(REPLACE(sales.platform_order_no, ',', ''))) as '订单数量', - round(sum(change.special_barcode_amt),2) as '退款金额', - count(refund.platform_order_no) as '退款订单数', - round(sum(sales.order_settle_amt)/count(sales.platform_order_no),2) as '订单均价' -FROM - dwd_trade_hkaudit_ecommerce_sale_mt sales -left join dwd_trade_hkaudit_ecommerce_sale_return_mt refund - on sales.platform_order_no = refund.platform_order_no -left join dwd_trade_hkaudit_ecommerce_sale_change_mt change - on sales.platform_order_no = change.platform_order_no -WHERE - sales.order_date >= '2022-01-01 00:00:00' - AND sales.order_date <'2025-07-31 00:00:00' -GROUP BY - sales.store_code, year(sales.order_date) + s.店铺编码, + s.年份, + ROUND(s.销售金额,2) AS '销售金额', + s.订单数量, + r.退款金额, + r.退款订单数, + ROUND(s.销售金额/s.订单数量,2) AS '订单均价' +FROM( + SELECT + store_code AS '店铺编码', + YEAR(order_date) AS '年份', + SUM(order_settle_amt) AS '销售金额', + -- 针对并单号情况,统计总行数加逗号个数得到总订单数量 + COUNT(platform_order_no) + + SUM(LENGTH(platform_order_no) - LENGTH(REPLACE(platform_order_no, ',', ''))) AS '订单数量' + dwd_trade_hkaudit_ecommerce_sale_mt + WHERE + order_date >= '2022-01-01 00:00:00' + AND order_date <'2025-07-01 00:00:00' + GROUP BY + store_code,YEAR(order_date) +) s --销售 +LEFT JOIN( + SELECT + YEAR(order_date) AS '年份', + store_code AS '店铺编码', + ROUND(SUM(refund.amount)+SUM(change.amount),2) AS '退款金额', + COUNT(refund.platform_order_no) AS '退款订单数' + FROM( + SELECT + -- 将拆分后的单个订单号作为分组和查询的键 + single_order_id AS platform_order_no, + MIN(store_code) AS store_code, + MIN(order_date) AS order_date + FROM( + SELECT + store_code, + platform_order_no, + order_date, + splitByChar(',', platform_order_no) AS order_id_array + FROM dwd_trade_hkaudit_ecommerce_sale_mt + WHERE + order_date >= '2022-01-01 00:00:00' + AND order_date <'2025-07-01 00:00:00' + ) + -- 使用arrayJoin将数组中的每个元素展开为一行 + ARRAY JOIN order_id_array AS single_order_id + GROUP BY single_order_no + ) sales + LEFT JOIN( + SELECT + platform_order_no, + SUM(return_goods_amt) + FROM + dwd_trade_hkaudit_ecommerce_sale_return_mt + GROUP BY + platform_order_no + ) refund + ON sales.platform_order_no = refund.platform_order_no + LEFT JOIN( + SELECT + platform_order_no, + SUM(special_barcode_amt) AS amount + FROM + dwd_trade_hkaudit_ecommerce_sale_change_mt + ) change + ON sales.platform_order_no = change.platform_order_no + WHERE + refund.platform_order_no IS NOT NULL + GROUP BY + store_code,YEAR(order_date) +) r -- 退款 +ON s.店铺编码 = r.店铺编码 AND s.年份 = r.年份 ORDER BY - sales.store_code ASC, 年份 ASC + 年份 ASC, 销售金额 DESC; -- 线下店铺年度销售金额、订单数量、退款金额、退款订单数、订单均价