#sql #group-by #pivot #presto #dynamic-pivot
#sql #группировка по #сводная #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
)
Это работает хорошо. Но я должен указать ключи sensor_value . Таким образом, мне нужно знать уникальные значения sensor, чтобы затем вручную написать соответствующий запрос. Проблема в том, что у меня нет такой информации. Знаете ли вы общее (и эффективное) решение для решения этой проблемы? Я был бы очень признателен за любую помощь. Спасибо.
Ответ №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