Создание псевдонима колонок Dynami c - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь запросить некоторые данные в снежинке и сохранить себе кучу жесткого кодирования

Мои строки данных (давайте назовем этот подзапрос A) выглядят примерно так

| my_index  | score | some_enum |
|-----------|-------|-----------|
| abc.      | 100.  | x.        |
| abc.      | 50.   | x.        |
| abc.      | 50.   | y.        |
| abc.      | 60.   | y.        |
| def.      | 90.   | z.        |

Я хочу сгруппировать по my_index и test_name, вычислить средние оценки, а затем объединить все эти данные обратно вместе с динамическими c именами столбцов на основе some_enum, так что это будет выглядеть примерно как

| my_index  | avg_score_x | avg_score_y | avg_score_z | avg_score |
|-----------|-------------|-------------|-------------|-----------|
| abc.      | 75.         | 55.         | 0/NaN/-1.   | 65.       |
| def.      | 0/NaN/-1.   | 0/NaN/-1.   | 90.         | 90.       |

Есть ли у кого-нибудь чистый способ динамического создания этих имен столбцов и объединения этих данных?

1 Ответ

1 голос
/ 12 марта 2020

Вы можете сделать условное агрегирование:

select
    myindex,
    avg(case when some_enum = 'x' then score end) avg_score_x,
    avg(case when some_enum = 'y' then score end) avg_score_y,
    avg(case when some_enum = 'z' then score end) avg_score_z,
    avg(score) avg_score
from a
group by myindex
order by myindex
...