使用自定义列名执行Unpivot操作获取对应列值的实现方法咨询
需求实现方案
你可以根据自己的使用场景选择以下两种常用实现方式:
方式1:SQL实现(适配MySQL、PostgreSQL、Hive、Spark SQL等绝大多数数据库)
直接通过CASE WHEN分支判断匹配对应列的数值即可,语法通用:
SELECT Name, col1, col2, col3, MaxMarkSub AS mapping, CASE MaxMarkSub WHEN 'col1' THEN col1 WHEN 'col2' THEN col2 WHEN 'col3' THEN col3 ELSE NULL -- 若MaxMarkSub存在非预期值,可自定义默认返回值 END AS output FROM 替换为你的原表名;
如果是Hive/Spark SQL等支持map结构的引擎,还可以用更简洁的写法:
SELECT Name, col1, col2, col3, MaxMarkSub AS mapping, map('col1',col1,'col2',col2,'col3',col3)[MaxMarkSub] AS output FROM 替换为你的原表名;
方式2:Python Pandas实现
如果是用Python处理数据表,两种写法可选:
- 小数据量场景,用apply行遍历,写法直观:
import pandas as pd # df为读取后的原数据表对象 df['mapping'] = df['MaxMarkSub'] df['output'] = df.apply(lambda row: row[row['mapping']], axis=1)
- 大数据量场景,用lookup方法性能更高:
df['mapping'] = df['MaxMarkSub'] df['output'] = df.lookup(df.index, df['MaxMarkSub'])
内容的提问来源于stack exchange,提问作者Amalraj
相关产品推荐
相关产品推荐

