Поворот таблицы красного смещения - PullRequest
0 голосов
/ 08 ноября 2018

Я думаю, что мне нужно повернуть базу данных ... или, может быть, есть какая-то другая функция, которую я могу использовать, чтобы получить результат, который я ищу. Ниже показано, как выглядит мой текущий набор данных (на самом деле у меня около 15 метрик):

+----------------------------------+---------+------------------------+----------------+
|               ID                 | Metric 1|          Metric 2      | Overall Column |
+----------------------------------+---------+------------------------+----------------+
| 1                                | Red     | Yellow                 |        Red     |
| 2                                | Yellow  | Yellow                 |       Yellow   |
| 3                                |  Yellow |                        |       Yellow   |
+----------------------------------+---------+------------------------+----------------+

Весь столбец в SQL уже имеет логику, чтобы сказать «Красный», если какая-либо из метрик красная (даже если они тоже желтые), а затем «Желтый», если есть желтый. Также есть случаи, когда двумя метриками могут быть желтый, красный и т. Д. Я хочу добавить новый столбец, в котором будет конкретно указано, какая метрика (или метрики) вызвала общее значение красного или желтого цвета. Я думаю, что это своего рода стержень, который для каждого идентификатора будет иметь метрики в качестве значения строки и соответствующий цвет также в качестве значения строки (если это имеет смысл), а затем я могу сделать функцию listagg и затем присоединиться к ней. вернуться к исходному набору данных на основе идентификатора.

Пример Pivot, игнорировать col2 & col3 ..

+----------------------------------+---------+------------------------+----------------+
|               ID                 | col1    |          col2          | col3           |
+----------------------------------+---------+------------------------+----------------+
| 1                                | Red     |                        |                |
| 1                                | Yellow  |                        |                |
| 3                                |  Yellow |                        |                |
+----------------------------------+---------+------------------------+----------------+

После этого я могу зарегистрировать эту таблицу для захвата нескольких цветов, а затем присоединить ее к исходной таблице. Единственное, что я оставляю там, это если есть метрика красного и желтого для индивидуального идентификатора, а затем я делаю листаг, который принесет красный и желтый, даже если общее значение основано на метрике красного. Надеюсь, что эксперты по SQL помогут мне здесь.

1 Ответ

0 голосов
/ 12 ноября 2018

Redshift в настоящее время основан на Postgres 8.03, поэтому в нем отсутствуют многие функции, которые мы ожидали от Postgres за последние несколько лет.Так что попытка найти решение, включающее unnest, array или lateral, не может быть и речи (я научился этому нелегко).

Так что за исключением доступности всех этих новыхФункциями можно объединить исходную таблицу и создать набор каждого идентификатора и его метрик, используя union all и создав объединение для каждого столбца метрики.

select a.id, metrics.metric
from tbl a
inner join (
    select id, metric1 metric from tbl where metric1 is not null
    union all select id, metric2 from tbl where metric2 is not null
    union all select id, metric15 from tbl where metric15 is not null
) metrics ON metrics.id = a.id
order by a.id, metrics.metric

Результаты

id | item
---+--------
1  | red
1  | yellow
2  | blue
2  | green
2  | pink
3  | orange

SQL Fiddle

...