5.7 KiB
5.7 KiB
In [ ]:
from utils.gtools import MySQLconnect import pandas as pd # 先找出去年八月之后的订单号,订单时间,订单费用,订单所属条目,订单物流成本 with MySQLconnect('ods') as db: query = """SELECT DATE_FORMAT( order_date, '%Y-%m-%d' ), order_id, order_price_dollar, order_cate, SUM(pfi.package_fund + pfi.head_way_express_fee + pfi.other_expend + pfi.indemnity)/7 AS `物流成本` FROM ods.order_list ol LEFT JOIN order_express oe ON ol.order_id = oe.`单号` LEFT JOIN package_fee_info pfi ON oe.包裹号 = pfi.package WHERE order_date >= '2024-08-01' AND order_date <= '2025-01-21' AND fund_status NOT REGEXP '等待|退款|失败|冻结' AND site_name = 'Litfad' GROUP BY order_id """ order_df = pd.read_sql(query, db.con) print(order_df)
C:\Users\Admin\AppData\Local\Temp\ipykernel_2152\2535791683.py:19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy. order_df = pd.read_sql(query, db.con)
DATE_FORMAT(order_date,'%Y-%m-%d') order_id \
0 2024-08-01 240801000602903
1 2024-08-01 240801000802198
2 2024-08-01 240801001202641
3 2024-08-01 240801001402908
4 2024-08-01 240801001414785
... ... ...
143421 2025-01-20 250120235520923
143422 2025-01-20 250120235602837
143423 2025-01-20 250120235616266
143424 2025-01-20 250120235627823
143425 2025-01-20 250120235802366
order_price_dollar order_freight_price_dollar order_cate
0 201.66 64.30 家具
1 420.65 53.60 家具
2 51.93 13.66 家具
3 2099.55 112.20 家具
4 154.47 39.78 灯具
... ... ... ...
143421 496.54 50.00 家具
143422 121.50 17.02 灯具
143423 281.34 9.66 家具
143424 312.36 73.47 家具
143425 117.39 17.21 灯具
[143426 rows x 5 columns]
In [ ]:
# 取采购价 order_id = order_df['order_id'].tolist() order_ids = ','.join(f"'{i}'" for i in order_id) with MySQLconnect('ods') as db: query = f""" with t1 AS (SELECT LEFT ( ol.out_detials_outlink_id, 15 ) AS order_id, SUM( out_detials_qty * price )/ 7 AS instock_cost, NULL AS buy_cost FROM ods.outstock_list ol JOIN ods.instock_list il ON ol.store_in_id = il.id WHERE LEFT ( ol.out_detials_outlink_id, 15 ) IN ({order_ids}) GROUP BY LEFT ( ol.out_detials_outlink_id, 15 ) UNION ALL SELECT LEFT ( order_product_id, 15 ) as order_id, NULL as instock_cost, SUM(buy_num * actual_price)/ 7 AS buy_cost FROM `warehouse_purchasing` WHERE LEFT ( order_product_id, 15 ) IN ({order_ids}) AND buy_audit = "采购完成" group by LEFT ( order_product_id, 15 ) ) SELECT order_id, SUM(CASE WHEN instock_cost is null THEN buy_cost ELSE instock_cost END) AS pur_cost FROM t1 GROUP BY order_id """