Sving med/uten tabellfunc

Sving med/uten tabellfunc

En pivottabell er et kraftig verktøy for å estimere, sammenstille og gjennomgå data for å finne mønstre og trender enda enklere. Pivot -tabeller kan brukes til å samle, sortere, arrangere, omorganisere, gruppe, totale eller gjennomsnittlige data i et datasett for å virkelig forstå dataforeninger og avhengigheter. Å bruke en pivottabell som illustrasjon er den enkleste måten å demonstrere hvordan denne metoden fungerer. PostgreSql 8.3 ble lansert for noen år tilbake, og en ny versjon som heter 'tabellfunc' ble lagt til. Tabellfunc er en komponent som inneholder flere metoder som gir tabeller (det vil si flere rader). Denne modifiseringen kommer med et veldig kult utvalg av funksjoner. Crosstab -metoden, som vil bli brukt til å lage pivottabeller, er blant dem. Crosstab -metoden tar et tekstlig argument: en SQL -kommando som returnerer rå data i den første utformingen og returnerer en tabell i den påfølgende utformingen.

Eksempel Pivot -tabell uten TableFunc:

For å begynne å jobbe med PostgreSQL -svingingen med 'TableFunc' -modulen, må du prøve å lage et pivottabell uten den. Så la oss åpne PostgreSQL-kommandolinjeskallet og oppgi parameterverdiene for den nødvendige serveren, databasen, portnummeret, brukernavnet og passordet. La disse parametrene være tomme hvis du vil bruke standard valgte parametere.

Vi oppretter en ny tabell som heter 'Test' i databasen 'Test' med noen felt i den, som vist nedenfor.

>> Opprett tabelltest (ID int, navn varchar (20), Sal int, Job Varchar (20));

Etter å ha opprettet en tabell, er det på tide å sette inn noen verdier i tabellen, som vist fra spørringen nedenfor.

>> sett inn i test (id, navn, sal, jobb) verdier (11, 'aqsa', 45000, 'forfatter'), (11, 'aqsa', 48000, 'offiser'), (11, 'aqsa', 50000, 'Doctor'), (12, 'Raza', 40000, 'Officer'), (11, 'Raza', 60000, 'Doctor'), (12, 'Raza', 67000, 'Officer'), ((( 13, 'Saeed', 85000, 'Writer'), (13, 'Saeed', 69000, 'Officer'), (13, 'Saeed', 90000, 'Doctor');

Du kan se at de relevante dataene er blitt satt inn. Du kan se at denne tabellen har mer enn 1 av de samme verdiene for ID, navn og jobb.

>> velg * fra input;

La oss opprette en pivottabell, som vil oppsummere posten til tabellen 'Test' ved hjelp av spørringen nedenfor. Kommandoen fusjonerer de samme verdiene til kolonnen 'ID' og 'Navn' i en rad mens du tar summen av 'lønns' kolonneverdier for de samme dataene i henhold til 'id' og 'navn'. Det er også å fortelle hvor mange ganger en verdi har skjedd i det aktuelle verdiene.

>> Velg ID, navn, sum (sal) sal, sum ((jobb = 'lege') :: int) lege, sum ((jobb = 'forfatter') :: int) skribent, sum (((jobb = 'offiser ') :: int) "offiser" fra testgruppe etter ID, navn;

Eksempel Pivot -tabell med TableFunc:

Vi starter med å forklare hovedpoenget vårt fra et realistisk synspunkt, og så vil vi beskrive pivot -tabellopprettelsen i trinn vi liker. Så for det første må du legge til tre tabeller for å jobbe med en pivot. Den første tabellen vi skal lage er 'sminke', som vil lagre informasjon om sminkehjelp. Prøv spørringen nedenfor i kommandolinjeskallet for å opprette denne tabellen.

>> Lag tabell hvis ikke eksisterer sminke (make_id int primærnøkkel, p_name varchar (100) ikke null);

Etter opprettelsen av tabellen 'sminke', la oss legge til noen poster til det. Vi skal utføre den nedenfor-listede spørringen i skallet for å legge til 10 poster i denne tabellen.

Vi må lage en annen tabell som heter 'brukere' som kommer til å holde postene til brukerne som bruker disse produktene. Utfør den under-uttalte spørringen i skallet for å lage denne tabellen.

>> Opprett tabell hvis ikke eksisterer brukere (user_id int primærnøkkel, u_name varchar (100) ikke null);

Vi har satt inn de 20 postene for tabellen 'brukere' som vist på bildet nedenfor.

Vi har en annen tabell, 'Makeup_user', som vil inneholde gjensidige poster for både 'Makeup' og 'brukere' -tabellen. Det har et annet felt, 'pris', som vil spare prisen på produktet. Tabellen er generert ved å bruke den angitte spørringen nedenfor.

>> Opprett tabell hvis ikke eksisterer makeup_user (id int primærnøkkel, midt ikke null referanser sminke (make_id), uid int ikke null referanser brukere (user_id), pris desimal (18,2));

Vi har satt inn totalt 56 poster i denne tabellen, som vist på bildet.

La oss lage en visning videre for å bruke det til generering av et pivottabell. Denne visningen bruker indre sammenføyning for å matche de primære nøkkelkolonneverdiene for alle de tre tabellene og hente 'navnet', 'Product_name', og 'Kostnaden' for et produkt fra en tabell 'kunder'

>> Lag vis v_makeup_users som velg c.u_name, p.p_name, pc.Pris fra brukere c indre bli med makeup_user pc på c.user_id = pc.Uid indre bli med sminke p på pc.Mid = s.make_id;

For å bruke dette, må du først installere TableFunc -pakken for databasen du vil bruke. Denne pakken er innebygd PostgreSql 9.1 og senere utgitt ved å kjøre den under-uttalte kommandoen. TableFunc -pakken er aktivert for deg nå.

>> Lag utvidelse hvis ikke eksisterer tabellfunc;

Etter å ha opprettet utvidelsen, er det på tide å bruke Crosstab () -funksjonen for å lage en pivottabell. Så vi bruker følgende spørring i kommandolinjeskallet for å gjøre det. Denne spørringen henter først posten fra den nyopprettede 'visningen'. Disse postene vil bli bestilt og gruppert etter stigende rekkefølge av kolonnene 'U_Name' og 'P_name'. Vi har listet opp sminkenavnet for hver kunde, som de har kjøpt, og de totale kostnadene for produkter kjøpt i tabellen. Vi har brukt unionen all operatør på kolonnen 'p_name' for å oppsummere alle produktene som er kjøpt av en kunde hver for seg. Dette vil oppsummere alle kostnadene for produkter kjøpt av en bruker til en verdi.

Pivotbordet vårt har vært klart og vist på bildet. Du kan tydelig se at noen kolonneområder er tomme under hvert P_Name fordi de ikke har kjøpt det aktuelle produktet.

Konklusjon:

Vi har nå strålende lært hvordan vi lager en pivottabell for å oppsummere tabellenes resultater med og uten bruk av tabellfunc -pakken.