PostgreSQL

Zaokret sa / bez Tablefunc

Zaokret sa / bez Tablefunc

Zaokretna tablica moćan je alat za procjenu, sastavljanje i pregled podataka radi još jednostavnijeg pronalaženja uzoraka i trendova. Izvedene tablice mogu se koristiti za agregiranje, sortiranje, uređivanje, preuređivanje, grupiranje, ukupan ili prosječan podatak u skupu podataka kako bi se uistinu razumjele asocijacije i ovisnosti podataka. Korištenje zaokretne tablice kao ilustracije najjednostavniji je način za prikaz načina na koji ova metoda djeluje. PostgreSQL 8.3 pokrenut je prije nekoliko godina, a nova verzija nazvana 'tablefunc'dodano je. Tablefunc komponenta je koja sadrži nekoliko metoda koje daju tablice (to jest više redaka). Ova izmjena dolazi s vrlo cool rasponom značajki. Među njima je i metoda unakrsne tablice koja će se koristiti za izradu zaokretnih tablica. Metoda unakrsne tablice uzima tekstualni argument: SQL naredba koja vraća sirove podatke u prvom izgledu i vraća tablicu u sljedećem izgledu.

Primjer zaokretne tablice bez TableFunc:

Da biste započeli raditi na PostgreSQL pivotiranju s modulom 'tablefunc', morate pokušati napraviti zaokretnu tablicu bez njega. Otvorimo dakle ljusku naredbenog retka PostgreSQL i navedimo vrijednosti parametara za potrebni poslužitelj, bazu podataka, broj porta, korisničko ime i lozinku. Ostavite ove parametre praznima ako želite koristiti zadane odabrane parametre.

Stvorit ćemo novu tablicu pod nazivom "Test" u bazi podataka "test" s nekim poljima u njoj, kao što je prikazano u nastavku.

>> Test STVORI TABELU (Id int, ime varchar (20), sal int, posao varchar (20));

Nakon stvaranja tablice, vrijeme je da u tablicu umetnete neke vrijednosti, kao što je prikazano iz upita u nastavku.

>> INSERT INTO Test (Id, name, sal, job) VRIJEDNOSTI (11, 'Aqsa', 45000, 'Writer'), (11, 'Aqsa', 48000, 'Officer'), (11, 'Aqsa', 50000, 'Liječnik'), (12, 'Raza', 40000, 'Časnik'), (11, 'Raza', 60000, 'Liječnik'), (12, 'Raza', 67000, 'Časnik'), ( 13, 'Saeed', 85000, 'Writer'), (13, 'Saeed', 69000, 'Časnik'), (13, 'Saeed', 90000, 'Doctor');

Vidite da su relevantni podaci uspješno umetnuti. Možete vidjeti da ova tablica ima više od 1 iste vrijednosti za id, ime i posao.

>> SELECT * FROM input;

Stvorimo zaokretnu tablicu koja će sažeti zapis tablice 'Test' pomoću upita u nastavku. Naredba spaja iste vrijednosti stupca 'Id' i 'name' u jednom retku, uzimajući zbroj vrijednosti stupca 'plaća' za iste podatke prema 'Id' i 'name'. Također govori koliko se puta dogodila jedna vrijednost u određenom skupu vrijednosti.

>> ODABIR Id, ime, zbroj (sal) sal, zbroj ((posao = 'Liječnik') :: int) Liječnik, zbroj ((posao = 'Pisac') :: int) Pisac, zbroj ((posao = 'Službenik ') :: int) "Službenik" IZ TESTNE GRUPE PO Id, ime;

Primjer zaokretne tablice s TableFunc:

Za početak ćemo objasniti našu glavnu točku s realnog stajališta, a zatim ćemo opisati stvaranje zaokretne tablice u koracima koji nam se sviđaju. Dakle, prije svega, morate dodati tri tablice da biste mogli raditi na pivotu. Prva tablica koju ćemo stvoriti je 'Šminka', koja će pohraniti informacije o osnovnim šminkama. Isprobajte upit u nastavku u ljusci naredbenog retka da biste stvorili ovu tablicu.

>> STVORI TABELU AKO NE POSTOJI Šminka (make_Id int PRIMARNI KLJUČ, p_name VARCHAR (100) NOT NULL);

Nakon stvaranja tablice 'Šminka', dodajte joj neke zapise. Izvršit ćemo dolje navedeni upit u ljusci kako bismo ovoj tablici dodali 10 zapisa.

Moramo stvoriti još jednu tablicu pod nazivom 'korisnici' koja će sadržavati evidenciju korisnika koji koriste te proizvode. Izvršite dolje navedeni upit u ljusci da biste stvorili ovu tablicu.

>> STVORI TABELU AKO NE POSTOJI korisnici (user_id int PRIMARNI KLJUČ, u_name varchar (100) NIJE NULL);

Umetnuli smo 20 zapisa za tablicu 'korisnici' kao što je prikazano na donjoj slici.

Imamo još jednu tablicu, 'makeup_user', koja će sadržavati međusobne zapise i tablice "Šminka" i "Korisnici". Ima još jedno polje, "cijena", koje će uštedjeti cijenu proizvoda. Tablica je generirana pomoću navedenog upita u nastavku.

>> STVORI TABELU AKO NE POSTOJI makeup_user (ID int PRIMARNI KLJUČ, srednji int NOT NULL REFERENCES Makeup (make_Id), Uid int NOT NULL REFERENCE korisnici (user_id), cijena decimalna (18,2));

U ovu smo tablicu ubacili ukupno 56 zapisa, kao što je prikazano na slici.

Stvorimo prikaz dalje kako bismo ga koristili za generiranje zaokretne tablice. Ovaj prikaz koristi INNER Join kako bi se podudarali s vrijednostima stupca primarnog ključa sve tri tablice i dohvaćali 'ime', 'naziv_proizvoda' i 'trošak' proizvoda iz tablice "kupci"

>> STVARI POGLED v_makeup_users KAO ODABERI c.u_ime, str.ime_pca, računalo.cijena OD korisnika c UNUTARNJI PRIDRUŽITE makeup_user pc UKLJ. c.user_id = kom.Uid INNER JOIN Makeup p NASTAV.Sredina = str.make_Id;

Da biste to koristili, prvo morate instalirati paket tablefunc za bazu podataka koju želite koristiti. Ovaj je paket ugrađen u PostgreSQL 9.1 i kasnije pušten pokretanjem dolje navedene naredbe. Sad je omogućen paket tablefunc.

>> IZRADI PROŠIRENJE AKO NE POSTOJI tablefunc;

Nakon stvaranja proširenja, vrijeme je da upotrijebite funkciju Crosstab () za izradu zaokretne tablice. Dakle, za to ćemo koristiti sljedeći upit u ljusci naredbenog retka. Ovaj upit prvo dohvaća zapis iz novostvorenog "View". Ti će se zapisi poredati i grupirati prema rastućem redoslijedu stupaca 'u_name' i 'p_name'. U tablici smo naveli njihov naziv šminke za svakog kupca kojeg su kupili i ukupni trošak proizvoda kupljenih. Primijenili smo operatora UNION ALL u stupcu 'p_name' da bismo saželi sve proizvode koje je jedan kupac kupio zasebno. To će sažeti sve troškove proizvoda koje je korisnik kupio u jednu vrijednost.

Naša pivot tablica je spremna i prikazana na slici. Jasno možete vidjeti da su neki prostori stupaca prazni ispod svakog p_name jer nisu kupili taj određeni proizvod.

Zaključak:

Sada smo sjajno naučili kako stvoriti zaokretnu tablicu za sažimanje rezultata tablica sa i bez upotrebe paketa Tablefunc.

Vodič za OpenTTD
OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...
SuperTuxKart za Linux
SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...
Vodič za bitku za Wesnoth
Bitka za Wesnoth jedna je od najpopularnijih strateških igara otvorenog koda koje trenutno možete igrati. Ne samo da se ova igra razvija već jako dugo...