PostgreSQL

Pivot s / bez Tablefunc

Pivot s / bez Tablefunc

Kontingenční tabulka je mocný nástroj pro odhad, kompilaci a kontrolu dat, aby se vzory a trendy ještě snáze hledaly. Kontingenční tabulky lze použít k agregaci, třídění, uspořádání, přeskupení, seskupení, součtu nebo průměrování dat v datové sadě, aby skutečně porozuměly datovým asociacím a závislostem. Použití kontingenční tabulky jako ilustrace je nejjednodušší způsob, jak demonstrovat, jak tato metoda funguje. PostgreSQL 8.3 byla spuštěna před několika lety a nová verze s názvem 'tablefunc' byl přidán. Tablefunc je komponenta, která obsahuje několik metod, které poskytují tabulky (tj. více řádků). Tato modifikace přichází s velmi cool řadou funkcí. Mezi nimi je i metoda křížové tabulky, která bude použita k vytvoření kontingenčních tabulek. Metoda křížové tabulky přebírá textový argument: příkaz SQL, který v prvním rozložení vrátí nezpracovaná data a v následném rozložení vrátí tabulku.

Příklad kontingenční tabulky bez TableFunc:

Chcete-li začít pracovat na otočení PostgreSQL s modulem 'tablefunc', musíte se pokusit vytvořit kontingenční tabulku bez ní. Pojďme tedy otevřít prostředí příkazového řádku PostgreSQL a poskytnout hodnoty parametrů pro požadovaný server, databázi, číslo portu, uživatelské jméno a heslo. Pokud chcete použít výchozí vybrané parametry, nechte tyto parametry prázdné.

Budeme vytvářet novou tabulku s názvem „Test“ v databázi „test“ s některými poli, jak je zobrazeno níže.

>> CREATE TABLE Test (Id int, name varchar (20), sal int, job varchar (20));

Po vytvoření tabulky je čas vložit do tabulky některé hodnoty, jak ukazuje následující dotaz.

>> INSERT INTO Test (Id, name, sal, job) VALUES (11, 'Aqsa', 45000, 'Writer'), (11, 'Aqsa', 48000, 'Officer'), (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');

Vidíte, že příslušná data byla úspěšně vložena. Můžete vidět, že tato tabulka obsahuje více než 1 stejných hodnot pro ID, jméno a úlohu.

>> SELECT * FROM vstup;

Vytvořme kontingenční tabulku, která pomocí následujícího dotazu shrne záznam tabulky „Test“. Příkaz sloučí stejné hodnoty sloupce „Id“ a „jméno“ v jednom řádku, přičemž vezme součet hodnot sloupce „plat“ pro stejná data podle „Id“ a „jména“. Také to říká, kolikrát došlo k jedné hodnotě v konkrétní sadě hodnot.

>> VYBRAT Id, jméno, součet (sal) sal, součet ((job = 'Doctor') :: int) Doctor, sum ((job = 'Writer') :: int) Writer, sum ((job = 'Officer) ') :: int) "Důstojník" ZE SKUPINY PODLE Id, jméno;

Příklad kontingenční tabulky s TableFunc:

Začneme vysvětlením našeho hlavního bodu z realistického hlediska a poté v krocích, které se nám líbí, popíšeme vytvoření kontingenční tabulky. Nejprve tedy musíte přidat tři tabulky, abyste mohli pracovat na otočném čepu. První tabulka, kterou vytvoříme, je „Makeup“, kde budou uloženy informace týkající se základních makeupů. Zkuste vytvořit následující tabulku v prostředí příkazového řádku.

>> CREATE TABLE IF NOT EXISTS Makeup (make_Id int PRIMARY KEY, p_name VARCHAR (100) NOT NULL);

Po vytvoření tabulky „Makeup“ k ní přidáme nějaké záznamy. V shellu provedeme níže uvedený dotaz, abychom do této tabulky přidali 10 záznamů.

Musíme vytvořit další tabulku s názvem 'users', která bude uchovávat záznamy o uživatelích, kteří používají tyto produkty. Proveďte níže uvedený dotaz v shellu a vytvořte tuto tabulku.

>> CREATE TABLE IF NOT EXISTS users (user_id int PRIMARY KEY, u_name varchar (100) NOT NULL);

Vložili jsme 20 záznamů pro tabulku „uživatelé“, jak je znázorněno na obrázku níže.

Máme další tabulku „makeup_user“, která bude uchovávat vzájemné záznamy tabulky „Makeup“ i „users“. Má další pole „cena“, které ušetří cenu produktu. Tabulka byla vygenerována pomocí níže uvedeného dotazu.

>> CREATE TABLE IF NOT EXISTS makeup_user (ID int PRIMARY KEY, Mid int NOT NULL REFERENCES Makeup (make_Id), Uid int NOT NULL REFERENCES users (user_id), price decimal (18,2));

Do této tabulky jsme vložili celkem 56 záznamů, jak je znázorněno na obrázku.

Pojďme vytvořit pohled dále, abychom jej mohli použít pro generování kontingenční tabulky. Toto zobrazení používá INNER Join k porovnání hodnot sloupce primárního klíče všech tří tabulek a načtení „name“, „product_name“ a „cost“ produktu z tabulky „customers“

>> VYTVOŘIT ZOBRAZENÍ v_makeup_users VÝBĚR c.u_name, str.p_name, pc.cena OD uživatelů c VNITŘNÍ PŘIPOJENÍ makeup_user pc ON c.user_id = pc.Uid INNER JOIN Makeup p na pc.Střední = str.make_Id;

Chcete-li to použít, musíte nejprve nainstalovat balíček tablefunc pro databázi, kterou chcete použít. Tento balíček má zabudovanou PostgreSQL 9.1 a později uvolněn spuštěním níže uvedeného příkazu. Balíček tablefunc je pro vás nyní povolen.

>> VYTVOŘTE ROZŠÍŘENÍ, POKUD NENÍ EXISTUJE tablefunc;

Po vytvoření rozšíření je čas použít funkci Crosstab () k vytvoření kontingenční tabulky. K tomu tedy použijeme následující dotaz v prostředí příkazového řádku. Tento dotaz nejprve načítá záznam z nově vytvořeného 'Zobrazit'. Tyto záznamy budou seřazeny a seskupeny podle vzestupného pořadí sloupců 'u_name' a 'p_name'. V tabulce jsme uvedli jejich název make-upu pro každého zákazníka, kterého si zakoupili, a celkové náklady na produkty zakoupené v tabulce. Použili jsme operátor UNION ALL ve sloupci 'p_name' pro shrnutí všech produktů zakoupených jedním zákazníkem samostatně. Tím se všechny náklady na produkty zakoupené uživatelem shrnou do jedné hodnoty.

Naše kontingenční tabulka byla připravena a zobrazena na obrázku. Jasně vidíte, že některé mezery ve sloupcích jsou prázdné pod každým p_name, protože daný produkt nezakoupili.

Závěr:

Nyní jsme se skvěle naučili, jak vytvořit kontingenční tabulku, která shrne výsledky tabulek s použitím balíčku Tablefunc a bez něj.

Hry Jak stáhnout a přehrát Sid Meier's Civilization VI v systému Linux
Jak stáhnout a přehrát Sid Meier's Civilization VI v systému Linux
Úvod do hry Civilization 6 je moderní pojetí klasického konceptu představeného v sérii her Age of Empires. Myšlenka byla docela jednoduchá; začali bys...
Hry Jak nainstalovat a hrát Doom na Linuxu
Jak nainstalovat a hrát Doom na Linuxu
Úvod do Doom Série Doom vznikla v 90. letech po vydání původního Doomu. Byl to okamžitý hit a od té doby herní série získala řadu ocenění a původní Do...
Hry Vulkan pro uživatele Linuxu
Vulkan pro uživatele Linuxu
S každou novou generací grafických karet vidíme, že vývojáři her posouvají hranice grafické věrnosti a přibližují se k fotorealismu. Ale navzdory vešk...