PostgreSQL

Exemple PostgreSQL UNNEST

Exemple PostgreSQL UNNEST
Puteți specifica o coloană în PostgreSQL ca doar o serie de tipuri adecvate de date. Tipurile de date încorporate, specificate de utilizator și inalienabile sunt toate posibilități. În afară de aceasta, matricile sunt foarte relevante în PostgreSQL. Ați aflat despre matrici în PostgreSQL, inclusiv despre cum să construiți, să interogați și, uneori, chiar să generați matrici cu metoda ARRAY. Cu toate acestea, există momente în care aș dori să fac invers și să convertesc o matrice PostgreSQL în rânduri. Există multe cauze pentru care ați dori să faceți acest lucru. Pentru o vreme, să presupunem că sunteți în căutarea joncțiunii a două matrice. În PostgreSQL, operatorul INTERSECT poate face acest lucru în mod eficient pentru două seturi diferite de rânduri. Cu toate acestea, nu există nicio contrapartidă pentru tablouri. La fel, operatorul UNION alătură 2 perechi de rânduri; cu toate acestea, nu există nimic comparabil pentru tablouri. Metoda UNNEST pare a fi secretul pentru toate acestea. În timp ce consumați UNNEST, trebuie să aveți grijă, deoarece (la fel ca în majoritatea sistemelor informatice), PostgreSQL ar face tot ceea ce îi indicați să facă, nu exact ceea ce doriți să facă.

Pentru a elabora acest concept pe deplin, deschideți shell-ul de linie de comandă instalat al PostgreSQL în sistemul dvs. Furnizați numele serverului, numele bazei de date, numărul portului, numele de utilizator și parola pentru un anumit utilizator dacă nu doriți să începeți să lucrați cu opțiunile implicite. Dacă doriți să lucrați cu parametrii impliciți, lăsați toate opțiunile goale și apăsați Enter fiecare opțiune. Acum, shell-ul dvs. din linia de comandă este pregătit să funcționeze.

Exemplul 01: definiți datele de tip matrice

Este o idee bună să studiați fundamentele înainte de a trece la modificarea valorilor matricei din baza de date. Iată modul de a specifica o listă de tipuri de text. Puteți vedea că rezultatul a arătat lista tipurilor de text folosind clauza SELECT.

>> SELECTAȚI „Aqsa, Raza, Saeed” :: text [];

Tipul de date trebuie definit în timpul scrierii unei interogări. PostgreSQL nu va recunoaște tipul de date dacă pare a fi un șir. Alternativ, am putea folosi formatul ARRAY [] pentru a-l specifica ca tip de șir, așa cum se arată în anexa de mai jos în interogare. Din ieșirea citată mai jos, puteți vedea că datele au fost preluate ca tip matrice utilizând interogarea SELECT.

>> SELECTAREA ARRAYULUI ['Aqsa', 'Raza', 'Saeed'];

Când selectați aceleași date matrice cu interogarea SELECT în timp ce utilizați clauza FROM, nu funcționează așa cum ar trebui. De exemplu, încercați interogarea de mai jos a clauzei FROM din shell. Veți verifica dacă va apărea o eroare. Acest lucru se datorează faptului că clauza SELECT FROM presupune că datele pe care le preluează sunt probabil un grup de rânduri sau unele puncte dintr-un tabel.

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

Exemplul 02: convertiți matricea în rânduri

ARRAY [] este o funcție care returnează o valoare atomică. Ca urmare, se potrivește numai cu SELECT și nu cu clauza FROM, deoarece datele noastre nu se aflau în formularul „rând”. De aceea am primit o eroare în exemplul de mai sus. Iată cum să utilizați funcția UNNEST pentru a converti matricele în rânduri în timp ce interogarea dvs. nu funcționează cu clauza.

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

Exemplul 03: Convertiți rândurile în matrice

Pentru a converti din nou rândurile într-o matrice, trebuie să definim acea interogare specifică într-o interogare pentru a face acest lucru. Aici trebuie să utilizați cele două interogări SELECT. O interogare de selectare internă convertește o matrice în rânduri utilizând funcția UNNEST. În timp ce interogarea externă SELECT convertește din nou toate acele rânduri într-o singură matrice, așa cum se arată în imaginea citată mai jos. Ai grijă; trebuie să utilizați ortografii mai mici de „matrice” în interogarea externă SELECT.

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

Exemplul 04: Eliminați duplicatele folosind clauza DISTINCT

DISTINCT vă poate ajuta să extrageți duplicate din orice formă de date. Cu toate acestea, necesită în mod necesar utilizarea rândurilor ca date. Aceasta înseamnă că această metodă funcționează pentru numere întregi, text, flotante și alte tipuri de date, dar matricele nu sunt permise. Pentru a elimina duplicatele, trebuie mai întâi să convertiți datele de tip matrice în rânduri folosind metoda UNNEST. După aceea, aceste rânduri de date convertite vor fi trecute la clauza DISTINCT. Puteți avea o privire asupra rezultatului de mai jos, că matricea a fost convertită în rânduri, apoi numai valorile distincte din aceste rânduri au fost preluate folosind clauza DISTINCT.

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

Dacă aveți nevoie de o matrice ca ieșire, utilizați funcția array () în prima interogare SELECT și utilizați clauza DISTINCT în următoarea interogare SELECT. Puteți vedea din imaginea afișată că ieșirea a fost afișată sub formă de matrice, nu pe rând. În timp ce rezultatul conține doar valori distincte.

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

Exemplul 05: Eliminați duplicatele în timp ce utilizați clauza ORDER BY

De asemenea, puteți elimina valorile duplicate din matricea de tip float, așa cum se arată mai jos. Împreună cu interogarea distinctă, vom folosi clauza ORDER BY pentru a obține rezultatul în ordinea de sortare a unei valori specifice. Încercați interogarea menționată mai jos în shell-ul liniei de comandă pentru a face acest lucru.

>> SELECT DISTINCT UNNEST ('2,85, 2.73, 2.85, 1.8, 2.73 ':: float []) COMANDĂ CU 1;

În primul rând, matricea a fost convertită în rânduri folosind funcția UNNEST; apoi, aceste rânduri vor fi sortate în ordine crescătoare utilizând clauza ORDER BY așa cum se arată mai jos.

Pentru a converti din nou rândurile într-o matrice, utilizați aceeași interogare SELECT în shell în timp ce o utilizați cu o funcție mică matricială alfabetică (). Puteți arunca o privire la ieșirea de mai jos că matricea a fost convertită mai întâi în rânduri, apoi au fost alese numai valorile distincte. În cele din urmă, rândurile vor fi convertite din nou într-o matrice.

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

Concluzie:

În cele din urmă, ați implementat cu succes fiecare exemplu din acest ghid. Sperăm că nu ați avut nicio problemă în timp ce efectuați metodele UNNEST (), DISTINCT și array () din exemple.

OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...
OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...
SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...