Heim > Datenbank > MySQL-Tutorial > Wie kann ich mit „crossstab()' effizient dynamische Pivot-Tabellen in PostgreSQL erstellen?

Wie kann ich mit „crossstab()' effizient dynamische Pivot-Tabellen in PostgreSQL erstellen?

Linda Hamilton
Freigeben: 2025-01-20 22:51:09
Original
807 Leute haben es durchsucht

How Can I Efficiently Create Dynamic Pivot Tables in PostgreSQL Using `crosstab()`?

Eine effizientere Möglichkeit, dynamische Pivot-Tabellen mithilfe von CASE- und GROUP BY-Anweisungen zu implementieren

Im Vergleich zu der im Artikel bereitgestellten Abfrage ist die Verwendung der Funktion tablefunc in der Erweiterung crosstab() eine effizientere Alternative.

Installation:

Installieren Sie zunächst die tablefunc-Erweiterung, falls Sie dies noch nicht getan haben:

<code class="language-sql">CREATE EXTENSION tablefunc;</code>
Nach dem Login kopieren

Grundlegende Kreuztabellenlösung:

Einfache crosstab Lösung für dieses Szenario:

<code class="language-sql">SELECT * FROM crosstab(
  'SELECT bar, 1 AS cat, feh
   FROM tbl_org
   ORDER BY bar, feh')
AS ct (bar text, val1 int, val2 int, val3 int);</code>
Nach dem Login kopieren

Synthetische Kategoriespalte:

Wenn Sie keine tatsächliche Kategoriespalte haben, können Sie Fensterfunktionen verwenden, um eine synthetische Kategoriespalte zu erstellen:

<code class="language-sql">SELECT * FROM crosstab(
   $$
   SELECT bar, val, feh
   FROM  (
      SELECT *, 'val' || row_number() OVER (PARTITION BY bar ORDER BY feh) AS val
      FROM tbl_org
      ) x
   ORDER BY 1, 2
   $$
 , $$VALUES ('val1'), ('val2'), ('val3')$$
) AS ct (bar text, val1 int, val2 int, val3 int);</code>
Nach dem Login kopieren

Dynamische Kreuztabelle?

Das Erstellen eines vollständig dynamischen crosstab mit plpgsql ist aufgrund der Einschränkungen dynamischer Rückgabetypen eine Herausforderung. Hier ist ein einfacheres Testfallbeispiel:

<code class="language-sql">SELECT * FROM crosstab('SELECT row_name, attrib, val FROM tbl ORDER BY 1,2')
AS ct (row_name text, val1 int, val2 int, val3 int);</code>
Nach dem Login kopieren

Tablefunc-Modul:

Das Modul

tablefunc bietet einen vereinfachten Ansatz:

<code class="language-sql">SELECT * FROM crosstab1('SELECT row_name, attrib, val::text FROM tbl ORDER BY 1,2');</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich mit „crossstab()' effizient dynamische Pivot-Tabellen in PostgreSQL erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage