Я работаю с SQL для базы данных Clickhouse.
У меня есть таблица со следующими данными:
┌─report_date──┬─platform─┬─viewers─┬─effectivePlaytime─┬─revenue─┐
│ Date │ String │ UInt32 | Float32 │ Float32 |
└──────────────┴──────────┴─────────┴───────────────────┴─────────┘
Я хотел бы выполнить операцию над этой таблицей, которую можно было бы назвать операцией разворота. При этом извлекается одна строка для каждой метрики, даты и платформы вместо обычной одной строки для каждой платформы и данных, которую возвращает обычный select * from data_table
.
Это то, что мне нужно иметь в ответе.
┌─report_date──┬─platform─┬─metric ─┬─Value───┐
│ Date │ String │ String | Float32 │
└──────────────┴──────────┴─────────┴─────────┘
Моя текущая попытка сделать несколько UNION ALL
и дает желаемый результат, однако мне хотелось бы иметь лучшее (более компактное и, предположительно, более быстрое) решение.
SELECT report_date, platform, 'viewers' AS metric, viewers AS value
FROM platform_table
UNION ALL
SELECT report_date, platform, 'effectivePlaytime' AS metric, effectivePlaytime AS value
FROM platform_table
UNION ALL
SELECT report_date, platform, 'revenue' AS metric, revenue AS value
FROM platform_table
Вы хотите ARRAY JOIN
. Попробуй это:
SELECT
report_date,
platform,
metric,
value
FROM platform_table
ARRAY JOIN
['viewers', 'effectivePlaytime', 'revenue'] AS metric,
[viewers, effectivePlaytime, revenue] AS value