Как быстро сгладить таблицу SQL

Я использую Presto. Если у меня есть таблица вроде:

ID    CATEGORY     VALUE
1      a           ...
1      b
1      c
2      a
2      b
3      b 
3      d
3      e
3      f

Как бы вы преобразовались в приведенное ниже, не записывая регистр для каждой комбинации?

ID      A     B    C    D    E    F
1
2
3

person Moosa    schedule 09.06.2016    source источник
comment
Какое программное обеспечение для баз данных вы используете? Во многих есть функция PIVOT, но ее синтаксис немного отличается. Поищите в документации к вашему серверному программному обеспечению PIVOT и посмотрите, не сработает ли это для вас. Я также хотел бы отметить, что динамическое вращение ig обычно намного проще на уровне отображения (отчет, приложение).   -  person D Stanley    schedule 10.06.2016
comment
Я использую Presto. Посмотрим в Pivot.   -  person Moosa    schedule 10.06.2016
comment
Я быстро просмотрел документ Presto здесь: prestodb.io/docs/current и не смог ' не вижу ничего похожего на стержень. Почему вы не хотите использовать кейс? Опять же, это лучше всего делать на уровне отображения ... Одна из причин, конечно же, заключается в том, что на уровне отображения вам не требуется знать каждый столбец до того, как он существует.   -  person Nick.McDermaid    schedule 10.06.2016


Ответы (2)


Я никогда не использовал Presto, и документация кажется довольно тонкой, но основана на этой статье похоже, ты мог бы сделать

SELECT
  id,
  kv['A'] AS A,
  kv['B'] AS B,
  kv['C'] AS C,
  kv['D'] AS D,
  kv['E'] AS E,
  kv['F'] AS F
FROM (
  SELECT id, map_agg(category, value) kv
  FROM vtable
  GROUP BY id
) t

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

person D Stanley    schedule 09.06.2016

Мои 2 цента:

Если вы знаете «возможные» значения:

SELECT 
    m['web'] AS web,
    m['shopping'] AS shopping,
    m['news'] AS news,
    m['music'] AS music,
    m['images'] AS images,
    m['videos'] AS videos,
    m[''] AS empty 
FROM (
SELECT histogram(data_tab) AS m
FROM datahub
WHERE
    year = 2017
    AND month = 5
    AND day = 7
    AND name = 'search'
) searches

Нет функции PIVOT (пока)!

person Thomas Decaux    schedule 23.05.2017