商品销售状态明细计算

本文探讨了如何解决在商品销售数据中记录一天内状态频繁变化的问题,通过map结构实现utime和sale_status的对应显示。关键步骤包括使用concat_ws连接数据、collect_set转换为数组、最终转换为map格式便于操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

商品销售状态明细
交付的维度:dt+poi+sku
现有的维度:dt+poi+sku+hour

**背景:**需求方要求在一条数据中将该商品一天内该商品状态变化的时间点以及变化后的状态显示出来

**难点:**商品一天可能变化多次(hour),如何将商品变化的时间和变换后的状态一一对应的显示在一条数据中

**解决方案:**通过map的形式将数据显示在后面

具体思路:
1:运用concat_ws对每条数据的utime(变化时间)和sale_status(商品状态)进行拼接
2:按dt+poi+sku进行group by 并用collect_set将其(utime,sale_status)联合变成数组
3:同时运用concat_ws将其变成字符串,同时用逗号把每对kv对分割开来
4: 最后用str_to_map函数将其转换为map类型即可(这样可以使用map类型专用的函数)

复盘:
第2步用collect_set将其变成数组时其实里面的kv对就是用逗号分割的了,只是类型为数组。为何第三步不能直接cast成string

原因:因为第二步的结果虽然是数组,但是cast是将数据整体转换成了string,连【】都不会去掉 。而如果用concat_ws可以将整个数组拆开,不会保留【】

用collect_set:{“1640188800000”:“0”,“1640271194000”:“1”}
运用cast后:{"[1640188800000":“0”," 1640271194000":“1]”}

用concat_ws

select
dt
,poi_id
,base_sku_id
,str_to_map(concat_ws(',',collect_set(concat_ws(':',utime,cast(sale_status as string)))))  as  complaintDetail
from aa
where 
dt = '20211223'
and base_sku_id=220970
and poi_id=10000275
GROUP BY
dt
,poi_id
,base_sku_id



用cast

select
dt
,poi_id
,base_sku_id
,str_to_map(cast(collect_set(concat_ws(':',utime,cast(sale_status as string))) as string))  as  complaintDetail
from mart_mall.dim_op_pdt_poi_sku_status_da 
where 
dt = '20211223'
and base_sku_id=220970
and poi_id=10000275
GROUP BY
dt
,poi_id
,base_sku_id
### 商品打包销售设计方案 #### 设计概述 为了实现商品打包销售功能,可以构建一个基于Python的系统来管理库存、处理订单以及生成销售报告。此设计不仅能够支持基本的商品管理和交易操作,还可以通过集成第三方支付网关和物流服务接口增强用户体验。 #### 技术栈选择 对于前端界面部分可以选择Kivy框架来进行跨平台移动应用开发[^1],它允许创建触摸友好的用户交互体验,并且可以直接编译为APK用于安卓设备上部署。而后端逻辑则依赖于标准库和其他必要的扩展模块完成业务流程控制。 #### 功能模块划分 - **商品管理** - 添加新商品信息(名称、价格等) - 修改现有条目详情 - 删除不再售卖的产品 - **购物车机制** - 用户可向其中加入心仪物品 - 支持批量调整数量移除特定项 - 显示总价计算结果 - **结算与付款** - 提供多种在线支付选项给顾客挑选 - 完成实际转账动作并将状态反馈至客户端显示成功与否的信息 - **订单跟踪** - 记录每次购买行为产生的记录以便查询历史明细 - 更新发货进度直至确认收货为止 #### 数据存储考虑 采用SQLite作为轻量级的关系型数据库引擎保存所有必要资料[^2],其易于设置维护的特点非常适合小型项目快速上线的需求。同时,在涉及到敏感个人信息保护方面,则需遵循当地法律法规要求采取适当加密措施保障安全传输及静态存放期间的数据隐私性。 ```python import sqlite3 def create_connection(db_file): """ 创建一个新的数据库连接 """ conn = None; try: conn = sqlite3.connect(db_file) print(f'Successfully connected to {db_file}') except Error as e: print(e) return conn def init_db(conn): sql_create_products_table = """ CREATE TABLE IF NOT EXISTS products ( id integer PRIMARY KEY, name text NOT NULL, price real NOT NULL ); """ if conn is not None: try: c = conn.cursor() c.execute(sql_create_products_table) except Error as e: print(e) else: print("Error! cannot create the database connection.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值