SQL实现数据集标签提取及按标签类别汇总方法咨询
SQL多标签分类汇总实现思路
你已经完成了Meal字段拆分为单行订单项的前置操作,后续按以下3个步骤执行即可得到最终汇总结果:
- 步骤1:给订单项匹配对应标签
优先建议先维护一张标签规则映射表,表中至少存储「匹配关键词」和「对应标签名」两个字段,例如关键词"有机沙拉"对应标签VeganFriendly、关键词"气泡水"对应标签Softdrink。通过字符串包含逻辑关联拆分后的订单项表和规则表,即可为每个订单项打上匹配的标签,同一个订单项命中多个规则时会自动生成多条对应标签记录,刚好满足单条数据多标签的需求。
通用SQL示例(不同数据库字符串匹配函数可自行替换,比如INSTR、POSITION等):SELECT 拆分表.订单ID, 拆分表.订单项, 规则表.标签名 FROM 拆分后订单项表 拆分表 INNER JOIN 标签规则映射表 规则表 ON 拆分表.订单项 LIKE CONCAT('%', 规则表.匹配关键词, '%') - 步骤2:按订单维度对标签去重
同一订单可能存在多个订单项命中同一个标签的情况,比如订单同时买了可乐和雪碧都匹配到Softdrink标签,汇总时需保证同一订单的同一标签仅统计一次,因此需要按订单ID和标签名去重:SELECT DISTINCT 订单ID, 标签名 FROM 第一步得到的标签匹配结果表 - 步骤3:按标签分组做汇总统计
最后按标签分组,结合你的业务需求统计对应指标即可,例如统计每个标签关联的订单数、总金额等:SELECT 标签名 AS 分类名称, COUNT(DISTINCT 订单ID) AS 关联订单总量, SUM(原始表.订单金额) AS 分类总交易额 FROM 第二步得到的去重标签表 标签表 LEFT JOIN 原始订单表 原始表 ON 标签表.订单ID = 原始表.订单ID GROUP BY 标签名 ORDER BY 关联订单总量 DESC
若你的标签规则数量较少,也可以跳过搭建规则表的步骤,直接用CASE WHEN语句在第一步写死匹配规则,再通过列转行逻辑把多标签转换为多行结构即可。
内容的提问来源于stack exchange,提问作者UKDataGeek
相关产品推荐
相关产品推荐

