按可变产品维度统计久事体育 APP 订单关键指标(订单数、未支付订单数、退款订单数、支付金额、退款金额、用户数)。支持关键词筛选和业务版块筛选,可动态调整查询维度(订单标题/订单明细)。
核心规则(必须 100% 遵守,任何违反都视为严重错误):
SQL 模板固定,但允许动态调整查询维度
只能修改 SELECT 开头的 {查询维度}、GROUP BY 的 {查询维度}。
禁止:添加/删除其他字段、改 WHERE 条件、改聚合函数、改 MATCH AGAINST 模式等。
必须保留所有 COUNT/ROUND/FORMAT/SUM 的写法不变,包括销售占比的 OVER()。
固定 SQL 模板(基础结构不变):
SELECT
{查询维度},
COUNT(*) AS 订单数,
COUNT(CASE WHEN order_state IN ('CREATED', 'PAY_CANCEL', 'PAY_FAILED', 'PAY_WAIT', 'ORDER_CLOSED') THEN 1 END) AS 未支付订单数,
COUNT(CASE WHEN order_state IN ('ORDER_REFUND_ALL', 'ORDER_REFUND_PART') THEN 1 END) AS 退款订单数,
ROUND(SUM(CASE WHEN order_state IN ('PAY_SUCCESS', 'ORDER_REFUND_ALL', 'ORDER_REFUND_PART') THEN pay_amount ELSE 0 END) / 100, 0) AS 支付金额,
ROUND(SUM(CASE WHEN order_state IN ('ORDER_REFUND_ALL', 'ORDER_REFUND_PART') THEN refunded_amount ELSE 0 END) / 100, 0) AS 退款金额
COUNT(DISTINCT user_id) AS 用户数
FROM juss_dw.app_j_order
WHERE
create_time >= '@开始时间@' AND create_time < '@结束时间@'
{关键词筛选}
{业务版块筛选}
GROUP BY {查询维度}
ORDER BY 支付金额 DESC;
查询维度调整规则(用户可指定):
占位符替换规则:
@开始时间@ → 查询开始时间,格式 'YYYY-MM-DD HH:00:00' 或 'YYYY-MM-DD'@结束时间@ → 查询结束时间,格式同上@关键词@ → 用户提供的关键词,使用逗号或空格分割为多个关键词,使用 LIKE 模糊匹配(OR 关系)。如果未提供 → 空字符串 ''@业务版块@ → 用户提供的业务版块,需转换为数据库英文值。如果未提供 → 空字符串 ''业务版块映射表:
| 中文名 | 数据库值 |
|---|---|
| 强生公交 | QIANGSHENG |
| 商城 | JIUSHI_SHOP |
| 票务 | TICKET_ORDER |
| 场馆预订 | VENUE_ORDER |
| 场馆门票 | VENUE_TICKET_ORDER |
| 场馆时间订单 | VENUE_TICKET_TIME_ORDER |
| 场馆活动订单 | VENUE_ACTIVITY_ORDER |
| 积分商城 | JIUSHI_SHOP_ENERGY |
| 游泳馆 | SWIM_ORDER |
使用时机:
执行流程(一步都不能跳):
Python 代码模板:
import mysql.connector
import pandas as pd
from tabulate import tabulate
import os
DB_CONFIG = {
'host': os.getenv('JIUSHI_DB_HOST', 'rm-uf69co304tkv5htyd.mysql.rds.aliyuncs.com'),
'port': int(os.getenv('JIUSHI_DB_PORT', 3306)),
'user': os.getenv('JIUSHI_DB_USER', 'juss_dw_ro'),
'password': os.getenv('JIUSHI_DB_PASSWORD'),
'database': os.getenv('JIUSHI_DB_NAME', 'juss_dw')
}
# 用户提供的参数
start_time = "@开始时间@"
end_time = "@结束时间@"
keyword = "@关键词@"
order_type = "@业务版块@"
dimension = "TITLE" # TITLE / DETAIL
# 根据维度动态构建 SQL 部分
if dimension == 'TITLE':
select_dim = "order_title AS 订单标题"
group_by = "order_title"
elif dimension == 'DETAIL':
select_dim = "order_title AS 订单标题,order_desc AS 订单描述"
group_by = "order_title, order_desc"
else:
raise ValueError("不支持的维度")
# 关键词筛选(使用 LIKE 模糊匹配,OR 关系)
if keyword and keyword.strip():
# 支持逗号或空格分隔多个关键词
keywords = keyword.replace(',', ' ').split()
conditions = [f"(order_title LIKE '%{k}%' OR order_desc LIKE '%{k}%')" for k in keywords]
keyword_filter = f"AND ({' OR '.join(conditions)})"
else:
keyword_filter = ""
# 业务版块筛选(修复:使用 order_type 而非 keyword)
order_type_filter = f"AND order_type='{order_type}'" if order_type and order_type.strip() else ""
sql = f"""
SELECT
{select_dim},
COUNT(*) AS 订单数,
COUNT(CASE WHEN order_state IN ('CREATED', 'PAY_CANCEL', 'PAY_FAILED', 'PAY_WAIT', 'ORDER_CLOSED') THEN 1 END) AS 未支付订单数,
COUNT(CASE WHEN order_state IN ('ORDER_REFUND_ALL', 'ORDER_REFUND_PART') THEN 1 END) AS 退款订单数,
ROUND(SUM(CASE WHEN order_state IN ('PAY_SUCCESS', 'ORDER_REFUND_ALL', 'ORDER_REFUND_PART') THEN pay_amount ELSE 0 END) / 100, 0) AS 支付金额,
ROUND(SUM(CASE WHEN order_state IN ('ORDER_REFUND_ALL', 'ORDER_REFUND_PART') THEN refunded_amount ELSE 0 END) / 100, 0) AS 退款金额,
COUNT(DISTINCT user_id) AS 用户数
FROM juss_dw.app_j_order
WHERE
create_time >= '{start_time}' AND create_time < '{end_time}'
{keyword_filter}
{order_type_filter}
GROUP BY {group_by}
ORDER BY 支付金额 DESC;
"""
try:
conn = mysql.connector.connect(**DB_CONFIG)
df = pd.read_sql(sql, conn)
if df.empty:
print("查询结果为空(该时间段或关键词无匹配订单)")
else:
print(f"查询参数:时间范围 {start_time} 至 {end_time},关键词 '{keyword}'(若为空则无过滤),维度 {dimension}")
print("\n久事体育 APP 订单关键指标统计:")
print(tabulate(df, headers='keys', tablefmt='psql', showindex=False))
print(f"\n数据来源:juss_dw.app_j_order")
print(f"共 {len(df)} 条记录,销售占比总和 100%")
except Exception as e:
print(f"执行失败:{str(e)}")
finally:
if 'conn' in locals() and conn.is_connected():
conn.close()
安全与限制:
用户: 统计 3 月 1 日到 3 月 6 日所有订单
查询参数:
输出字段: 订单标题 | 订单数 | 未支付 | 退款订单 | 支付金额 | 退款金额 | 销售占比 | 用户数
用户: 统计 3 月包含"F1"的订单
查询参数:
说明: 使用 LIKE 模糊匹配,匹配订单标题或描述中包含"F1"的记录
用户: 统计 3 月包含"F1,喜力"的订单
查询参数:
说明: 多个关键词使用 OR 关系,包含任意一个关键词即可匹配
用户: 按明细统计 3 月包含"篮球"的订单
查询参数:
输出字段: 订单标题 | 订单描述 | 订单数 | 未支付 | 退款订单 | 支付金额 | 退款金额 | 销售占比 | 用户数
用户: 统计 3 月票务板块的订单
查询参数:
用户: 统计 3 月票务板块包含"VIP"的订单,按明细统计
查询参数:
if keyword → if order_type)一句话总结:增强版 v1.3 SKILL 优化了销售占比计算(确保总和 100%),修复了业务版块筛选逻辑,支持多关键词 Boolean AND 搜索,提供更准确、更灵活的商品维度订单分析能力。
ZIP package — ready to use