PostgreSQL

PostgreSQL UNNEST näited

PostgreSQL UNNEST näited
Võite PostgreSQL-is määrata veeru lihtsalt sobivate andmetüüpide massiivina. Kõik võimalused on sisseehitatud, kasutaja määratud ja võõrandamatud andmetüübid. Peale selle on massiivid PostgreSQL-is väga asjakohased. Olete õppinud PostgreSQL-i massiividest, sealhulgas sellest, kuidas massiive ARRAY-meetodil konstrueerida, pärida ja mõnikord isegi genereerida. Siiski on olukordi, kus tahaksin teha vastupidi ja teisendada PostgreSQL massiivi ridadeks. Põhjusi, miks soovite seda teha, on palju. Oletame korraks, et otsite kahe massiivi ristmikku. PostgreSQL-is saab operaator INTERSECT seda tõhusalt teha kahe erineva rea ​​komplekti jaoks. Massiivide jaoks pole aga vastet. Samamoodi ühendab operaator UNION 2 paari ridu; massiivide puhul pole aga midagi võrreldavat. Selle kõige saladus näib olevat UNNESTi meetod. UNNESTi tarbimise ajal peate olema ettevaatlik, kuna (nagu enamiku arvutisüsteemide puhul) teeks PostgreSQL kõike, mida te käskite, mitte täpselt seda, mida soovite teha.

Selle kontseptsiooni täielikuks väljatöötamiseks avage oma süsteemis PostgreSQL-i installitud käsurea kest. Sisestage konkreetse kasutaja jaoks serveri nimi, andmebaasi nimi, pordi number, kasutajanimi ja parool, kui te ei soovi vaikevalikutega tööle asuda. Kui soovite töötada vaikeparameetritega, jätke kõik valikud tühjaks ja vajutage sisestage kõik valikud. Nüüd on teie käsurea kest valmis töötama.

Näide 01: määratlege massiivi tüübi andmed

Enne andmebaasis olevate massiiviväärtuste muutmist on mõistlik uurida põhialuseid. Siin on viis tekstitüüpide loendi määramiseks. Näete, et väljundis on näidatud tekstitüüpide loend, kasutades klahvi SELECT.

>> VALI 'Aqsa, Raza, Saeed' :: tekst [];

Päringu kirjutamise ajal tuleb määratleda andmete tüüp. PostgreSQL ei tunnista andmete tüüpi, kui see näib olevat string. Teise võimalusena võime kasutada stringi tüübiks määramiseks vormingut ARRAY [], nagu on näidatud allpool päringus. Allpool viidatud väljundist näete, et andmed on massibi tüübina toodud SELECT päringu abil.

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

Kui valite klausli FROM kasutamise ajal sama massiivi andmed päringuga SELECT, ei tööta see nii, nagu peaks. Näiteks proovige allpool päringut FROM-i klauslist. Te kontrollite, kas sellega kaasneb viga. Seda seetõttu, et klausel SELECT FROM eeldab, et andmed, mida see hangib, on tõenäoliselt ridade rühm või mõni punkt tabelist.

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

Näide 02: massiivi teisendamine ridadeks

ARRAY [] on funktsioon, mis tagastab aatomi väärtuse. Selle tulemusena sobib see ainult SELECTi, mitte klausliga FROM, kuna meie andmed ei olnud vormis „rida”. Sellepärast saime ülaltoodud näites vea. Funktsiooni UNNEST abil saate massiivid ridadeks teisendada, kui teie päring ei tööta klausliga.

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

Näide 03: teisendage read massiiviks

Ridade uuesti massiiviks teisendamiseks peame selle jaoks päringus piiritlema selle konkreetse päringu. Siin peate kasutama kahte SELECT päringut. Sisemine valikupäring muudab massiivi ridadeks, kasutades funktsiooni UNNEST. Samal ajal kui väline SELECT päring teisendab kõik need read uuesti üheks massiiviks, nagu on näidatud allpool viidatud pildil. Vaata ette; välises SELECT päringus peate kasutama väiksemaid õigekirja massiivi.

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

Näide 04: Duplikaatide eemaldamine DISTINCT-klausli abil

DISTINCT aitab teil duplikaate välja võtta mis tahes vormis andmetest. Kuid see nõuab tingimata ridade kasutamist andmetena. See tähendab, et see meetod töötab täisarvude, teksti, ujukite ja muude andmetüüpide puhul, kuid massiivid pole lubatud. Duplikaatide eemaldamiseks peate kõigepealt teisendama oma massiivi tüübi andmed ridadeks, kasutades meetodit UNNEST. Pärast seda edastatakse need teisendatud andmeread klauslile DISTINCT. Allpool olevast väljundist saate pilgu heita, et massiiv on teisendatud ridadeks, seejärel on DISTINCT-klausli abil toodud ainult nendest ridadest erinevad väärtused.

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

Kui vajate väljundina massiivi, kasutage esimese SELECT päringu funktsiooni array () ja kasutage järgmise SELECT päringu DISTINCT klauslit. Kuvatud pildilt näete, et väljundit on näidatud massiivivormis, mitte real. Kuigi väljund sisaldab ainult erinevaid väärtusi.

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

Näide 05: Duplikaatide eemaldamine klausli ORDER BY kasutamisel

Samuti saate ujukitüübi massiivilt eemaldada duplikaatväärtused, nagu allpool näidatud. Koos erineva päringuga kasutame tulemust konkreetse väärtuse sortimisjärjekorras ORDER BY. Selleks proovige käsurea kestas allpool toodud päringut.

>> SELECT DISTINCT UNNEST ('2,85, 2.73, 2.85, 1.8, 2.73 ':: ujuk []) TELLI 1;

Esiteks on massiiv teisendatud ridadeks funktsiooni UNNEST abil; siis sorteeritakse need read kasvavas järjekorras, kasutades klauslit ORDER BY, nagu allpool näidatud.

Ridade uuesti massiiviks teisendamiseks kasutage kestas sama SELECT päringut, kui kasutate seda koos väikese tähestikulise massiivi () funktsiooniga. Võite heita pilgu allpool olevasse väljundisse, kui massiiv on kõigepealt teisendatud ridadeks, seejärel on valitud ainult erinevad väärtused. Lõpuks teisendatakse read uuesti massiiviks.

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

Järeldus:

Lõpuks olete selle juhendi kõik näited edukalt rakendanud. Loodame, et näidetes meetodite UNNEST (), DISTINCT ja array () täitmisel pole teil probleeme.

SuperTuxKart Linuxile
SuperTuxKart on suurepärane pealkiri, mis on loodud selleks, et tuua teie Linuxi süsteemis tasuta Mario Karti kogemus. See on päris keeruline ja lõbus...
Lahing Wesnothi õpetuse eest
Battle for Wesnoth on üks populaarsemaid avatud lähtekoodiga strateegiamänge, mida saate praegu mängida. See mäng pole mitte ainult olnud väga pikka a...
0 A.D. Õpetus
Paljudest strateegiamängudest on 0 A.D. suudab silma paista põhjaliku tiitli ja väga sügava taktikalise mänguna, hoolimata sellest, et see on avatud l...