189 lines
7.0 KiB
Plaintext
189 lines
7.0 KiB
Plaintext
{
|
|
"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
|
|
}
|