PostgreSQL перекрестная вкладка с тремя столбцами со значениями, суммированными из одного столбца

Я новичок в SQL и пытался сделать сводную таблицу в Postgres. Я бы сделал это в Excel, но у меня есть база данных с примерно 3,5 миллионами строк, 20 000 различных значений для кода, 7 категорий в cat, и значения переменных от 1 до 100. Код может иметь только несколько из 7 категорий.

Excel не может справиться с таким количеством строк, так что это SQL.

Мои данные в форме

code   |  cat        |   value |
--------------------------------
abc123 |   1         |    4    |
abc234 |   2         |    6    |
abc345 |   1         |    1    |
abc123 |   3         |    2    |
abc123 |   6         |    12   |

с кодом и cat как текст, значение как целое число, хранятся в таблице Postgres.

Я хотел бы выполнить перекрестную таблицу по коду и кошке, с суммой значений. Я бы хотел, чтобы в возврате отображался ноль вместо 'null', но если 'null' будет более простым запросом, то это будет хорошо.

Итак, я хотел бы получить результат

code   |   'cat=0' | 'cat=1' | 'cat=2' | 'cat=3' | 'cat=4' | 'cat=5' | 'cat=6'|
abc123 |    25     |  0      |  3      |  500    | 250     | 42      |  0     |
abc234 |     0     |  100    |  0      |   10    |  5      |  0      |   25   |
abc345 |    1000   |   0     |  0      |    0    |  0      |  0      |   0    |

Я искал в файлах помощи Postgres и на других форумах; ближе всего был вопрос SO PostgreSQL Crosstab Query, но я не смог понять, как суммировать значения из третьей колонки.

Любая помощь будет очень признательна.

7
задан Community 23 May 2017 в 12:32
поделиться