2016-08-10 5 views
0

Я пытаюсь использовать postgresql для суммирования некоторых данных и необходимости создания столбца частоты, а затем транспонировать другой столбец с результатами из частот.столбец SQL Transpose с частотами уникальных комбинаций в качестве новых значений

например. Моя стартовая таблица выглядит так:

Month | Nationality | Car 
Oct-15 | GBR   | Rover 
Sep-15 | FRA   | Fiat 
Oct-15 | GBR   | Rover 
Sep-15 | TUR   | Fiat 

Я хочу сделать новый столбец, который подсчитывает частоту каждой уникальной комбинации других столбцов. Так что хотелось бы что-то вроде этого:

Month | Nationality | Car | FREQ 
Oct-15 | GBR   | Rover | 2 
Sep-15 | FRA   | Fiat | 1 
Sep-15 | TUR   | Fiat | 1 

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

Nationality | Car | Sep-15 | Oct-15 
GBR   | Rover | 0  | 2 
FRA   | Fiat | 1  | 0 
TUR   | Fiat | 1  | 0 

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

Благодаря

ответ

1

Один метод использует условное агрегацию:

select nationality, car, 
     sum(case when month = 'Sep-15' then 1 else 0 end) as "Sep-15", 
     sum(case when month = 'Oct-15' then 1 else 0 end) as "Oct-15" 
from t 
group by nationality, car; 

Эта формулировка предполагает, что month хранится в виде строки, а не дата.

Postgres предлагает другие возможности для этой цели, такие как crosstab. Однако это похоже на самый простой способ для вашего дела.

+0

Спасибо, это решение выглядит хорошо. Тем не менее, мне бы очень хотелось, чтобы новые столбцы отображались в порядке дат, поэтому Sep-15 должен был появиться до 15 октября и т. Д. Если у меня есть столбец месяца, хранящийся в виде строки, они будут отображаться только в алфавитном порядке? – rw2

+0

@ rw2. , , Столбцы находятся в том порядке, в котором они отображаются в 'SELECT'. –