presto - 如何将一个ID对应的多行变成单行 - Presto
问题描述
我正在寻找转换以下数据的方法
"itemid" "attr_id" "Merk" "Berat" "Panjang" "BPOM" "TInggi" "Kadaluarsa"
3624918424 14718 "Hansaplast" "" "" "" "" ""
3624918424 22229 "" "" "" "" "" "24 Bulan"
进入这个
itemid Merk Berat Panjang BPOM TInggi Kadaluarsa
3624918424 Hansaplast 24 Bulan
我检查了 SO 中的另一个问题,最流行的答案是使用 PIVOT 函数。但是该功能在presto中不存在。有人可以使用 presto 解决方案吗?
解决方案
我认为您可以使用GROUP BY
子句来获得所需的结果:
SELECT itemid
,MAX(Merk) Merk
,MAX(Berat) Berat
,MAX(Panjang) Panjang
,MAX(BPOM) BPOM
,MAX(TInggi) TInggi
,MAX(Kadaluarsa) Kadaluarsa
from data_table
GROUP BY itemid
在您的示例中不清楚列是否NULL
为空字符串或具有空字符串''
- 使用空字符串可能会更复杂一些,并且您需要所有列的类似内容:
,MAX(case when Merk='' then NULL else Merk end) Merk
如果每个 itemid 有多个条目,并且您想保留所有条目,您也可以使用array_agg
:
array_agg(x) → array<[same as input]> 返回从输入 x 元素创建的数组。
推荐阅读
- javascript - Angular - 提交时订阅测试服务
- android-bluetooth - Android x86 禁用 USB 设备或驱动程序或选择蓝牙设备?
- svg - 重置 svg 模式原点
- npm - npm安装的“yarn add global”更新包可以吗?
- python - 根据其他列修改数据框列中的值
- typescript - 如何优雅地初始化 TypeScript 中的一系列对象?
- mysql - char_length() 和 character_length() 有什么区别
- python - 如何获取最大列值计数
- amazon-web-services - 如何通过cloudformation添加密码参数字段而不显示值?
- java - XML 存在时不存在