Hur man använder PostrgreSQL Crosstab-modulen

Hur Man Anvander Postrgresql Crosstab Modulen



När du kör en SELECT-sats för att hämta posterna från en PostgreSQL-tabell, returneras data i tabellform. Tabellformen kanske inte alltid är den bästa för att läsa data, speciellt när du vill jämföra värdena. Ett bättre tillvägagångssätt är att returnera posterna som en korstabell. För det erbjuder PostgreSQL tablefunc för att tillåta användare att använda korstabellfunktionen för att representera måldata som en pivottabell. Det här inlägget utvecklar mer om hur man använder PostgreSQL-korstabellfunktionen. Läs vidare!

Arbeta med PostgreSQL Crosstab-modulen

Att ha ett rum för att specificera hur du vill att din data ska representeras är praktiskt. Med PostgreSQL, även om standardsättet är att ha data i tabellform, ger korstabellmodulen dig ett annat alternativ. Du kan skapa pivottabellerna med hjälp av 'select'-kolumnerna från en PostgreSQL-tabell för en bättre presentation.

Den fantastiska funktionen kommer som en förlängning för PostgreSQL version 8.3. Tillägget 'tablefunc' erbjuder korstabellfunktionen, vilket gör det möjligt att ha pivottabellerna som din resultatuppsättning. Låt oss ge ett exempel.







Först skapar vi tabellen 'resultat' med tre kolumner med följande kommando:





Den skapade tabellen är tom. Så fortsätt och använd INSERT-frågan för att lägga till värdena till den. I det här fallet infogar vi några poster som visas i följande:





Om vi ​​kör 'select'-satsen får vi följande resultat. Notera hur detta standardsätt att hämta posterna presenterar dem i tabellform. Kolumnerna används som rubriker och deras respektive värden visas i raderna:



Även om det tidigare tillvägagångssättet fungerar i de flesta fall, finns det ett annat alternativ för att hämta samma poster. För det här fallet vill vi skapa en pivottabell. Därför använder vi 'tablefunc'-tillägget som kommer med PostgreSQL version 8.3+.


Så låt oss skapa ett 'tablefunc'-tillägg för att aktivera det när vi anropar det i frågan. Kör följande kommando:

SKAPA EXTENTION OM INTE FINNS tablefunc ;

Du kommer att veta att tillägget har aktiverats framgångsrikt när du får en utdata som den vi har i föregående bild.

För vår korstabellfunktion, låt oss göra det så att den första kolumnen är fakulteten. Nedanför finns de olika fakulteterna som vi har i vår tabell. Bredvid fakultetskolumnen har vi andra kolumner som representerar de olika värdena i kategorikolumnen i vår tabell. Slutligen, för varje kategori, har vi antalet elever som uppnått de olika kategorierna.

För att uppnå en sådan pivottabell, använd följande syntax:

VÄLJ * FRÅN CROSSTAB ( 'VÄLJ kolumn1 , kolumn 2 , kolumn 3 FRÅN tabellnamn ORDER BY criteriaa' )

SOM nytt_namn ( kolumn1 datatyp , kolumn2 datatyp , kolumn_n datatyp ) ;

Med hjälp av exempeltabellen som vi skapade ser vårt kommando ut som följer:

Innan vi ser resultaten, låt oss ha en uppdelning på hur korstabellmodulens kommando fungerar. Först returnerar SELECT-satsen tre kolumner. Den första kolumnen behandlas som radidentifierare. I vårt fall är det kolumnen 'fakulteten'. Den andra kolumnen, som är kolumnen 'kategori', representerar kategorierna för pivottabellen. Slutligen innehåller den tredje kolumnen värdena för kategorierna. I vårt fall är det antalet elever i varje kategori.

Med den förståelsen, när vi trycker på 'Enter'-tangenten, får vi pivottabellen enligt följande:

Baserat på den returnerade pivottabellen kan vi se att den fungerar som en 2D-matris där den första kolumnen i SELECT-satsen är den första matrisen och den andra kolumnen är den andra matrisen i dimensionen. Den tredje kolumnen innehåller värdena för de andra matriselementen.

Slutsats

PostgreSQL-korstabellen är bra för att representera tabellvärdena som en pivottabell. Du måste returnera tre kolumner i din SELECT-sats för att använda korstabellmodulen, och det här inlägget har delat ett praktiskt exempel på hur du använder den. Dessutom förklarade vi hur korstabellsmodulen fungerar för att skapa pivottabellen som använder samma logik som en 2-D-array.