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 - это столбцовая база данных, поэтому следует читать только ссылки на столбцы.