{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "a13175db", "metadata": {}, "outputs": [], "source": [ "BASE_SQL = \"\"\"\n", "WITH \n", "odr_list AS ( \n", " SELECT \n", " dwd.order_list.order_id,\n", " dwd.order_list.site_name,\n", " dwd.order_list.order_date,\n", " dwd.order_list.delivery_country,\n", " dwd.order_list.postcode,\n", " dwd.order_list.currency,\n", " dwd.order_list.order_price,\n", " dwd.order_list.order_freight_price,\n", " dwd.order_list.order_price_dollar,\n", " dwd.order_list.order_freight_price_dollar,\n", " dwd.order_list.insurance,\n", " dwd.order_list.discount_code,\n", " dwd.order_list.order_cate,\n", " dwd.order_list.fund_status,\n", " dwd.order_list.convey \n", " FROM \n", " dwd.order_list \n", " WHERE \n", " site_name REGEXP \"^litfad|beau|kwowking|lakiq\" \n", " AND fund_status NOT REGEXP \"等待\" \n", " AND DATE_FORMAT(order_date,\"%Y-%m-01\") >= \"2025-06-01\"\n", "),\n", "\n", "refund AS (\n", " SELECT\n", " ol.order_id,\n", " SUM(`当次退款USD金额`) AS \"总退款金额\",\n", " sum(`当次退款申请比例`) AS \"当次退款申请比例\",\n", " `原订单退款比例`,\n", " MAX(`申请时间`) AS \"最后一次申请时间\"\n", " FROM\n", " dwd.`cpmaso_order_refund` cof\n", " LEFT JOIN dwd.order_list ol ON ol.order_id = cof.order_id \n", " WHERE\n", " 状态 = \"退款成功\" \n", " AND 网站 REGEXP \"litfad|lakiq|kwoking|beau\" \n", " AND ol.order_date >= \"2025-01-01\" \n", " AND EXISTS (\n", " SELECT 1 FROM odr_list WHERE odr_list.order_id = cof.order_id\n", " )\n", " GROUP BY\n", " ol.order_id\n", "),\n", "-- WITH\n", "sub_order AS (\n", "SELECT DISTINCT\n", " opl.order_id,\n", "\n", " CASE \n", " WHEN (LENGTH(opl.order_product_id) - LENGTH(REPLACE(opl.order_product_id, '_', ''))) = 1 THEN opl.order_product_id\n", " ELSE SUBSTRING_INDEX(opl.order_product_id, '_', 2)\n", " END AS 子订单号,\n", "\n", " CASE \n", " WHEN (LENGTH(opl.order_product_id) - LENGTH(REPLACE(opl.order_product_id, '_', ''))) = 2 THEN opl.order_product_id\n", " ELSE NULL\n", " END AS 子子订单号,\n", "\n", " lor.redo_type AS 补发类型\n", "-- wp.actual_price * wp.buy_num AS 采购金额,\n", "-- buy_audit\n", "\n", "FROM dwd.order_product_list opl \n", "LEFT JOIN dws.log_order_reissue_detail lord \n", " ON lord.order_product_id = opl.order_product_id\n", "LEFT JOIN dwd.log_order_reissue lor \n", " ON lord.order_product_id = lor.order_product_id\n", "WHERE DATE_FORMAT(opl.order_date, \"%Y-%m-01\") >= \"2025-06-01\"\n", "\n", "),\n", "sub_order2 AS (\n", "SELECT\n", "order_id,\n", "COUNT(CASE WHEN 子子订单号 IS NULL THEN 1 ELSE NULL END) AS 子订单数,\n", "COUNT(CASE WHEN 子子订单号 IS NOT NULL THEN 1 ELSE NULL END) AS 子子订单数,\n", "COUNT(CASE WHEN 子子订单号 IS NOT NULL AND 补发类型 REGEXP \"配件补发|整件补发\" THEN 1 ELSE NULL END) AS 补发订单数,\n", "COUNT(CASE WHEN 子子订单号 IS NOT NULL AND 补发类型 REGEXP \"换款\" THEN 1 ELSE NULL END) AS 换款订单数,\n", "COUNT(CASE WHEN 子子订单号 IS NOT NULL AND 补发类型 NOT REGEXP \"换款|配件补发|整件补发\" AND 补发类型 IS NOT NULL THEN 1 ELSE NULL END) AS 其他补发数,\n", "COUNT(CASE WHEN 子子订单号 IS NOT NULL AND 补发类型 IS NULL THEN 1 ELSE NULL END) AS 拆分订单数\n", "FROM\n", "sub_order\n", "GROUP BY order_id\n", "),\n", "\n", "\n", "is_shipping AS (\n", "SELECT\n", " opl.order_id,\n", " count(distinct CASE WHEN oe.`关联提单号`<>\"--\" AND oe.`关联提单号`<>\"未关联\" AND oe.`包裹状态` not in ( \"已作废\",\"已删除\") THEN oe.`包裹号` ELSE null END) AS 已发货包裹数,\n", " COUNT(DISTINCT CASE WHEN oe.`包裹状态` not in ( \"已作废\",\"已删除\",\"--\") THEN oe.`包裹号` ELSE null END)AS 所有包裹数,\n", " MIN(oe.`客户签收时间`) AS 客户最早签收时间\n", " FROM order_express oe \n", " left join dwd.order_product_list opl on oe.`单号` = opl.order_id \n", " WHERE DATE_FORMAT(opl.order_date,\"%Y-%m-%d\") >'2025-01-01'\n", " GROUP BY opl.order_id\n", " \n", ")\n", "\n", "SELECT\n", " ol.*,\n", " rf.总退款金额,\n", " 当次退款申请比例,\n", " 原订单退款比例,\n", " 最后一次申请时间,\n", " so.子订单数,\n", " so.子子订单数,\n", " so.补发订单数,\n", " so.换款订单数,\n", " so.其他补发数,\n", " so.拆分订单数,\n", " CASE when sp.已发货包裹数 =sp.所有包裹数 then \"订单已发货\"\n", " WHEN sp.已发货包裹数 < sp.所有包裹数 THEN \"部分发货\"\n", " WHEN sp.已发货包裹数 = 0 then\"未发货\" ELSE \"无包裹\" END AS \"订单发货状态\" ,\n", " sp.客户最早签收时间\n", "FROM\n", " odr_list ol\n", " LEFT JOIN refund rf ON ol.order_id = rf.order_id\n", " LEFT JOIN sub_order2 so ON ol.order_id = so.order_id\n", " LEFT JOIN is_shipping sp ON ol.order_id = sp.order_id\"\"\"" ] }, { "cell_type": "code", "execution_count": null, "id": "6b6089e2", "metadata": {}, "outputs": [], "source": [ "\n", "#然后提取这些包裹号的提单ID\n", "#分析这些提单ID的总价和平均价格\n", "from utils.gtools import MySQLconnect\n", "import pandas as pd\n", "with MySQLconnect('ods') as db:\n", " engine = db.engine()\n", " order_df = pd.read_sql(BASE_SQL,engine)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "b9140af6", "metadata": {}, "outputs": [], "source": [ "#提取这些订单号的包裹号\n", "order_id = order_df['order_id'].tolist()\n", "order_ids = ','.join(f\"'{i}'\" for i in order_id)\n", "with MySQLconnect('ods') as db:\n", " conn = db.connect()\n", " cursor = conn.cursor()\n", " sql = f\"SELECT * FROM order_info WHERE order_id IN ({order_ids})\"" ] }, { "cell_type": "markdown", "id": "5e4096b2", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }