PostgreSQL

Příklady PostgreSQL UNNEST

Příklady PostgreSQL UNNEST
Sloupec v PostgreSQL můžete určit jako pole vhodných typů dat. Integrované, uživatelem zadané a nezcizitelné datové typy jsou všechny možnosti. Kromě toho jsou pole v PostgreSQL velmi relevantní. Naučili jste se o polích v PostgreSQL, včetně toho, jak konstruovat, dotazovat se a někdy dokonce generovat pole pomocí metody ARRAY. Existují však chvíle, kdy bych chtěl udělat reverzní a převést pole PostgreSQL na řádky. Existuje mnoho důvodů, proč byste to chtěli udělat. Řekněme, že na chvíli hledáte spojení dvou polí. V PostgreSQL to operátor INTERSECT může efektivně udělat pro dvě různé sady řádků. Pro pole však neexistuje žádný protějšek. Podobně operátor UNION spojí 2 páry řádků; pro pole však není nic srovnatelného. Tajemstvím toho všeho se zdá být metoda UNNEST. Při konzumaci UNNEST musíte být opatrní, protože (stejně jako u většiny počítačových systémů) PostgreSQL udělá cokoli, co mu nařídíte, ne přesně to, co chcete.

Chcete-li tento koncept plně rozvinout, otevřete ve svém systému nainstalovaný shell příkazového řádku PostgreSQL. Pokud nechcete začít pracovat s výchozími možnostmi, zadejte název serveru, název databáze, číslo portu, uživatelské jméno a heslo pro konkrétního uživatele. Pokud chcete pracovat s výchozími parametry, nechejte všechny možnosti prázdné a stiskněte Enter every option. Nyní je prostředí příkazového řádku připraveno pracovat.

Příklad 01: Definování dat typu pole

Je dobré si prostudovat základy, než přejdete k úpravám hodnot pole v databázi. Zde je způsob, jak určit seznam typů textu. Můžete vidět, že výstup zobrazil seznam typů textů pomocí klauzule SELECT.

>> SELECT 'Aqsa, Raza, Saeed' :: text [];

Typ dat musí být definován při psaní dotazu. PostgreSQL nerozpozná typ dat, pokud se zdá, že jde o řetězec. Alternativně můžeme použít formát ARRAY [] k jeho určení jako typu řetězce, jak je uvedeno níže v dotazu. Z výstupu uvedeného níže můžete vidět, že data byla načtena jako typ pole pomocí dotazu SELECT.

>> SELECT ARRAY ['Aqsa', 'Raza', 'Saeed'];

Když vyberete stejná data pole s dotazem SELECT při použití klauzule FROM, nefunguje to tak, jak by mělo. Zkuste například níže uvedený dotaz klauzule FROM v prostředí. Zkontrolujete, že se objeví chyba. Důvodem je, že klauzule SELECT FROM předpokládá, že načítaná data jsou pravděpodobně skupina řádků nebo některé body z tabulky.

>> SELECT * FROM ARRAY ['Aqsa', 'Raza', 'Saeed'];

Příklad 02: Převést pole na řádky

ARRAY [] je funkce, která vrací atomovou hodnotu. Výsledkem je, že se hodí pouze k příkazu SELECT a nikoli k klauzuli FROM, protože naše data nebyla ve formě řádku. Proto jsme ve výše uvedeném příkladu dostali chybu. Zde je způsob použití funkce UNNEST k převodu polí do řádků, zatímco váš dotaz nefunguje s klauzulí.

>> ZVOLIT NEJNEST (ARRAY ['Aqsa', 'Raza', 'Saeed']);

Příklad 03: Převést řádky do pole

Chcete-li řádky znovu převést na pole, musíme v rámci dotazu definovat konkrétní dotaz. Zde musíte použít dva dotazy SELECT. Interní výběrový dotaz převádí pole na řádky pomocí funkce UNNEST. Zatímco externí dotaz SELECT opět převádí všechny tyto řádky do jednoho pole, jak je znázorněno na obrázku citovaném níže. Dávej si pozor; musíte použít menší hláskování 'pole' v externím dotazu SELECT.

>> SELECT array (SELECT UNNEST (ARRAY ['Aqsa', 'Raza', 'Saeed']));;

Příklad 04: Odebrání duplikátů pomocí klauzule DISTINCT

DISTINCT vám pomůže extrahovat duplikáty z jakékoli formy dat. Nutně však vyžaduje použití řádků jako dat. To znamená, že tato metoda funguje pro celá čísla, text, plováky a další datové typy, ale pole nejsou povolena. Chcete-li odebrat duplikáty, musíte nejprve převést data typu pole do řádků pomocí metody UNNEST. Poté budou tyto převedené datové řádky předány klauzuli DISTINCT. Níže můžete vidět letmý pohled na to, že pole bylo převedeno do řádků, poté byly pomocí klauzule DISTINCT načteny pouze odlišné hodnoty z těchto řádků.

>> SELECT DISTINCT UNNEST ('Aqsa, Raza, Saeed, Raza, Uzma, Aqsa' :: text []);

Pokud potřebujete pole jako výstup, použijte funkci array () v prvním dotazu SELECT a v dalším dotazu SELECT použijte klauzuli DISTINCT. Ze zobrazeného obrázku můžete vidět, že výstup byl zobrazen ve formě pole, nikoli v řádku. Zatímco výstup obsahuje pouze odlišné hodnoty.

>> SELECT array (SELECT DISTINCT UNNEST ('Aqsa, Raza, Saeed, Raza, Uzma, Aqsa' :: text []));

Příklad 05: Odebrání duplikátů při použití klauzule ORDER BY

Můžete také odstranit duplicitní hodnoty z pole typu float, jak je znázorněno níže. Spolu s odlišným dotazem použijeme klauzuli ORDER BY k získání výsledku v pořadí řazení konkrétní hodnoty. Vyzkoušejte níže uvedený dotaz v prostředí příkazového řádku.

>> VYBRAT NEJMENŠÍ NEJNOVĚJŠÍ ('2,85, 2.73, 2.85, 1.8, 2.73 ':: float []) OBJEDNAT NA 1;

Nejprve bylo pole převedeno do řádků pomocí funkce UNNEST; pak budou tyto řádky seřazeny do vzestupného pořadí pomocí klauzule ORDER BY, jak je znázorněno níže.

Chcete-li řádky převést znovu na pole, použijte stejný výběrový dotaz v prostředí a při jeho použití s ​​malou funkcí abecedního pole (). Můžete se podívat na výstup níže, že pole bylo nejprve převedeno do řádků, poté byly vybrány pouze odlišné hodnoty. Nakonec budou řádky znovu převedeny do pole.

>> SELECT array (SELECT DISTINCT UNNEST ('2,85, 2.73, 2.85, 1.8, 2.73 ':: float []));

Závěr:

Nakonec jste úspěšně implementovali každý příklad z této příručky. Doufáme, že při provádění metody UNNEST (), DISTINCT a array () v příkladech nemáte žádný problém.

Hry Nejlepší hry z příkazového řádku pro Linux
Nejlepší hry z příkazového řádku pro Linux
Příkazový řádek není při používání Linuxu jen vaším největším spojencem - může být také zdrojem zábavy, protože jej můžete použít k hraní mnoha zábavn...
Hry Nejlepší aplikace pro mapování gamepadu pro Linux
Nejlepší aplikace pro mapování gamepadu pro Linux
Pokud rádi hrajete hry na Linuxu s gamepadem místo typického vstupního systému pro klávesnici a myš, máte k dispozici několik užitečných aplikací. Mno...
Hry Užitečné nástroje pro hráče Linuxu
Užitečné nástroje pro hráče Linuxu
Pokud rádi hrajete hry na Linuxu, je pravděpodobné, že jste ke zlepšení herního zážitku použili aplikace a nástroje jako Wine, Lutris a OBS Studio. Kr...