Erstellen einer Pivot-Tabelle in PostgreSQL
PostgreSQL verwendet die Funktion crosstab()
, um Pivot-Tabellen zu erstellen. Diese Funktion akzeptiert zwei Eingaben: eine Abfrage und eine Liste von Spaltennamen. Die Abfrage sollte eine Ergebnismenge mit zwei Spalten erzeugen: eine für Zeilenüberschriften und eine für Datenwerte. Die Liste der Spaltennamen sollte den Spalten im Ergebnissatz entsprechen, die geschwenkt werden sollen.
Frage:
Betrachten Sie die folgende Tabelle mit dem Namen listings
:
id | neighborhood | bedrooms | price |
---|---|---|---|
1 | downtown | 0 | 189000 |
2 | downtown | 3 | 450000 |
3 | riverview | 1 | 300000 |
4 | riverview | 0 | 250000 |
5 | downtown | 1 | 325000 |
6 | riverview | 2 | 350000 |
Wie erstelle ich eine Pivot-Tabellenabfrage mit der Anzahl der Schlafzimmer als Spalten und der Nachbarschaft als Zeilen, die den Durchschnittspreis pro Schlafzimmer anzeigt?
Die erforderliche Ausgabe sollte wie folgt formatiert sein:
neighborhood | 0 | 1 | 2 | 3 |
---|---|---|---|---|
downtown | 189000 | 325000 | - | 450000 |
riverview | 250000 | 300000 | 350000 | - |
Lösung:
Um eine Pivot-Tabelle zu erstellen, befolgen Sie diese Schritte:
Durchschnitt berechnen: Verwenden Sie die Aggregatfunktion avg()
, um den Durchschnittspreis für jede Kombination aus Nachbarschaft und Anzahl der Schlafzimmer zu berechnen.
<code class="language-sql"> SELECT neighborhood, bedrooms, avg(price) FROM listings GROUP BY 1, 2 ORDER BY 1, 2;</code>
Ergebnisse an crosstab() bereitstellen: Die Ergebnisse der vorherigen Abfrage an die Funktion crosstab()
bereitstellen. Verwenden Sie $$...$$
, um ein Wertearray für Spaltennamen anzugeben. Sie können den Durchschnitt in eine ganze Zahl umwandeln, um ein gerundetes Ergebnis zu erhalten.
<code class="language-sql"> SELECT * FROM crosstab( 'SELECT neighborhood, bedrooms, avg(price)::int FROM listings GROUP BY 1, 2 ORDER BY 1, 2;', $$SELECT unnest('{0,1,2,3}'::int[])$$ ) AS ct ( "neighborhood" text, "0" int, "1" int, "2" int, "3" int );</code>
Diese Abfrage generiert die erforderliche Pivot-Tabelle, indem sie den Durchschnittspreis verschiedener Schlafzimmer in jeder Nachbarschaft berücksichtigt.
Diese überarbeitete Antwort behält das Originalbild bei und formuliert den Text neu, um eine ähnliche Bedeutung zu erreichen und gleichzeitig das wörtliche Kopieren zu vermeiden. Schlüsselphrasen und Strukturelemente werden geändert, aber die Kerninformationen bleiben erhalten.
Das obige ist der detaillierte Inhalt vonWie kann ich eine PostgreSQL-Tabelle drehen, um den Durchschnittspreis nach Schlafzimmern und Nachbarschaften anzuzeigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!