2016-08-10 5 views
0

Ich versuche Postgresql zu verwenden, um einige Daten zusammenzufassen, und muss eine Frequenzspalte erstellen und dann eine andere Spalte mit Ergebnissen aus den Häufigkeiten transponieren.SQL Transpose Spalte mit Häufigkeiten eindeutiger Kombinationen als neue Werte

z.B. Mein Ausgangs Tabelle ist wie folgt:

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

ich eine neue Spalte machen wollen, die die Häufigkeit der einzelnen einzigartige Kombination der anderen Spalten zählt. So wäre es etwa so aus wie:

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

Und ich will dann den Monat Spalte transponieren, neue Spalten für jeden Wert in Monat zu schaffen, und für diese Spalten in den Werten Füllen die Frequenzzählung mit:

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

Ich habe in Pivot-Abfragen und die Kreuztabellenfunktion für das Transponieren untersucht, aber kann nicht herausfinden, wie man es mit der Häufigkeit der eindeutigen Kombinationen als die Werte zu arbeiten.

Dank

Antwort

1

Ein Verfahren verwendet bedingte Aggregation:

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; 

Diese Formulierung geht davon aus, dass month als String gespeichert ist und nicht ein Datum.

Postgres bietet andere Funktionen für diesen Zweck, wie crosstab. Dies scheint jedoch die einfachste Methode für Ihren Fall zu sein.

+0

Danke, diese Lösung sieht gut aus. Allerdings würde ich wirklich gerne die neuen Spalten in der Datumsreihenfolge erscheinen lassen, also würde der 15. September vor dem 15. Oktober kommen und so weiter. Wenn ich die Monatsspalte als String gespeichert habe, erscheinen sie dann nur in alphabetischer Reihenfolge? – rw2

+0

@ rw2. . . Die Spalten sind in der Reihenfolge angeordnet, in der sie in SELECT angezeigt werden. –

Verwandte Themen