如何在SQL中合并同一交易下含不同信息的两行数据?
如何合并交易表中transfer与order类型的记录,得到包含buyer_id和price的单行数据
问题背景
你有一张交易表,包含transfer(转账)和order(订单)两种事件类型:
buyer_id仅存储在transfer类型的记录中price仅存储在order类型的记录中- 同一场交易的两类记录通过
Trans ID关联
表结构示例:
Order ID Trans ID Timestamp Category ID Buyer ID Price Event type 4646820767 347571948 2022-04-02 10:05:48 8699308 75 order 4646820796 347571948 2022-04-02 10:05:48 8699308 2530070 transfer
你当前的尝试
select a.order_id, a.asset_id, a.timestamp, a.category_id, b.buyer_id, a.price from table a inner join table b on a.trans_id = b.trans_id
解决方案
你的关联思路方向正确,但需要明确事件类型的匹配规则,避免无效关联或错误数据。以下提供两种可行方案:
方案1:指定事件类型的JOIN
明确关联双方的事件类型,确保a是订单记录、b是转账记录:
select a.order_id, a.timestamp, a.category_id, b.buyer_id, a.price from your_table a inner join your_table b on a.trans_id = b.trans_id and a.event_type = 'order' and b.event_type = 'transfer'
注意:将your_table替换为你的实际表名;原SQL中的asset_id在提供的表结构中不存在,需根据实际表结构调整或删除
方案2:聚合函数合并(适配多记录场景)
如果同一trans_id下可能存在多条相关记录,用聚合函数提取非空字段值,自动合并为单行:
select trans_id, max(order_id) as order_id, max(timestamp) as timestamp, max(category_id) as category_id, max(buyer_id) as buyer_id, max(price) as price from your_table group by trans_id
内容的提问来源于stack exchange,提问作者user19429488
相关产品推荐
相关产品推荐

