AWS Redshift: столбцы в строки (от широкого до длинного)

Я пишу запрос, результат которого будет отображаться в виде панели на Redash. Запрос в основном представляет собой сумму нескольких столбцов таблицы за определенный промежуток времени:

SELECT
   sum(col_A),
   sum(col_B),
   sum(col_C)
FROM
   table_X
WHERE
   timestamp > '2018-01-01'
   AND timestamp < '2018-02-01'

Результат примерно такой:

col_A    col_B    col_C    
123      456      789

Однако, чтобы правильно отобразить панель мониторинга, мне нужен результат в длинном формате:

column   sum
col_A    123
col_B    456
col_C    789

Как я могу привести результат из широкого формата в длинный?

1 ответ

Решение

Простой способ заключается в использовании union all:

SELECT sum(col_A) FROM table_X WHERE timestamp > '2018-01-01' AND timestamp < '2018-02-01'
UNION ALL
SELECT sum(col_B) FROM table_X WHERE timestamp > '2018-01-01' AND timestamp < '2018-02-01'
UNION ALL
SELECT sum(col_C) FROM table_X WHERE timestamp > '2018-01-01' AND timestamp < '2018-02-01';

Возможно, вам нужно быть осторожным с заказом. Я бы включил второй столбец, в котором указывается, что именно агрегируется.

Три отдельных запроса не так плохо, как кажется. Redshift - это столбцовая база данных, поэтому следует читать только ссылки на столбцы.

Другие вопросы по тегам