Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich Kreuztabellenabfragen in PostgreSQL mit dem Modul „tablefunc'?

Wie erstelle ich Kreuztabellenabfragen in PostgreSQL mit dem Modul „tablefunc'?

DDD
DDDOriginal
2025-01-25 11:16:10468Durchsuche

Detaillierte Erläuterung der PostgreSQL-Kreuztabellenabfrage und der tablefuncModulanwendung

How to Create Crosstab Queries in PostgreSQL using the `tablefunc` module?

In diesem Artikel wird detailliert beschrieben, wie Sie mit dem tablefunc-Modul eine Kreuztabellenabfrage in PostgreSQL erstellen.

tablefuncModul

installieren

Zuerst müssen Sie die tablefunc-Erweiterung installieren:

<code class="language-sql">CREATE EXTENSION IF NOT EXISTS tablefunc;</code>

Beispiel

Testformular:

<code class="language-sql">CREATE TABLE tbl (
   section   text,
   status    text,
   ct        integer
);

INSERT INTO tbl VALUES 
  ('A', 'Active', 1), ('A', 'Inactive', 2),
  ('B', 'Active', 4), ('B', 'Inactive', 5),
  ('C', 'Inactive', 7);</code>

Zielkreuztabelle:

<code>Section | Active | Inactive
---------+--------+----------
A       |      1 |        2
B       |      4 |        5
C       |        |        7</code>

crosstabFunktion

Einzelparameterformular (eingeschränkt):

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT section, status, ct
    FROM   tbl
    ORDER  BY 1,2'  -- 必须为 "ORDER BY 1,2"
   ) AS ct ("Section" text, "Active" int, "Inactive" int);</code>

Doppelte Parameterform (empfohlen):

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT section, status, ct
    FROM   tbl
    ORDER  BY 1,2'  -- 也可简化为 "ORDER BY 1"

  , $$VALUES ('Active'::text), ('Inactive')$$
   ) AS ct ("Section" text, "Active" int, "Inactive" int);</code>

Die Auswirkungen der mehrzeiligen Eingabe

Einzelparameterformular:

  • Füllen Sie die Spalte mit den verfügbaren Werten von links nach rechts aus.
  • Überschüssige Werte werden verworfen.
  • Ältere Eingabezeilen haben Vorrang.

Doppelparameterform:

  • Weisen Sie jeden Eingabewert seiner speziellen Spalte zu.
  • Überschreiben Sie alle vorherigen Aufgaben.
  • Spätere Eingabezeilen haben Vorrang.

Erweiterte Beispiele

crosstabview

in psql

PostgreSQL 9.6 hat diesen Metabefehl in psql eingeführt:

<code class="language-sql">db=> SELECT section, status, ct FROM tbl \crosstabview</code>

Das obige ist der detaillierte Inhalt vonWie erstelle ich Kreuztabellenabfragen in PostgreSQL mit dem Modul „tablefunc'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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