如何在 Presto 中旋转表格?

kak*_*tto 8 sql pivot group-by dynamic-pivot presto

设一个名为 data 的表,其中包含 time、sensor、value 列:

在此输入图像描述

我想在 Athena (Presto) 上旋转该表以获得一个像这样的新表:

在此输入图像描述

为此,可以运行以下查询:

SELECT time, 
sensor_value['temperature'] as "temperature", 
sensor_value['pressure'] as "pressure" 
FROM (
    SELECT time, mapp_agg(sensor, value) sensor_value
    FROM data
    GROUP BY time
)
Run Code Online (Sandbox Code Playgroud)

这效果很好。但是,我必须指定sensor_value 的键。因此,我需要知道传感器的唯一值,然后相应地手动编写查询。问题是我没有这样的信息。您知道解决此问题的通用(且有效)解决方案吗?我真的很感激任何帮助。谢谢。

小智 1

这会给你答案,你只需要创建一个 row_number 来透视你的表。

SELECT 
    TIME, 
    MAX(CASE WHEN SENSOR='TEMPERATURE' THEN VALUE END) AS TEMPERATURE,
    MAX(CASE WHEN SENSOR='PRESSURE' THEN VALUE END) AS PRESSURE
 FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY SENSOR ORDER BY TIME) AS ROW_GROUP FROM TEMP_PRESSURE)
GROUP BY ROW_GROUP
Run Code Online (Sandbox Code Playgroud)