PostgreSQL

PostgreSQL UNNEST Exempel

PostgreSQL UNNEST Exempel
Du kan ange en kolumn i PostgreSQL som bara en uppsättning lämpliga datatyper. Inbyggda, användarspecificerade och oförsvarliga datatyper är alla möjligheter. Bortsett från det är matriser mycket relevanta i PostgreSQL. Du har lärt dig om arrays i PostgreSQL, inklusive hur man konstruerar, frågar och ibland till och med genererar arrays med ARRAY-metoden. Det finns dock tillfällen då jag skulle vilja göra omvänd och konvertera en PostgreSQL-array till rader. Det finns många orsaker till varför du vill göra detta. För ett tag, låt oss säga att du letar efter korsningen mellan två matriser. I PostgreSQL kan INTERSECT-operatören effektivt göra detta för två olika uppsättningar rader. Det finns dock ingen motsvarighet till matriser. På samma sätt går UNION-operatören samman med två par rader; det finns dock inget jämförbart för matriser. UNNEST-metoden verkar vara hemligheten för allt detta. När du konsumerar UNNEST måste du vara försiktig eftersom (som med de flesta datorsystem) PostgreSQL skulle göra allt du instruerar det att göra, inte precis vad du vill att det ska göra.

För att utarbeta detta koncept helt, öppna det installerade kommandoradsskalet av PostgreSQL i ditt system. Ange servernamn, databasnamn, portnummer, användarnamn och lösenord för den specifika användaren om du inte vill börja arbeta med standardalternativen. Om du vill arbeta med standardparametrar, lämna varje alternativ tomt och tryck på Enter varje alternativ. Nu är ditt kommandoradsskal beredd att arbeta på.

Exempel 01: Definiera arraytypsdata

Det är en bra idé att studera grunderna innan du går vidare till att ändra arrayvärden i databasen. Här är sättet att specificera en texttypslista. Du kan se att utdata har visat texttypslistan med SELECT-satsen.

>> VÄLJ 'Aqsa, Raza, Saeed' :: text [];

Typen av data måste definieras när du skriver en fråga. PostgreSQL känner inte igen typen av data om det verkar vara en sträng. Alternativt kan vi använda ARRAY [] -formatet för att ange det som strängtyp, som visas bifogat nedan i frågan. Från utdata som citeras nedan kan du se att data har hämtats som arraytyp med SELECT-frågan.

>> VÄLJ ARRAY ['Aqsa', 'Raza', 'Saeed'];

När du väljer samma arraydata med SELECT-frågan medan du använder FROM-satsen, fungerar den inte som den ska. Prova till exempel frågan nedan om FROM-sats i skalet. Du kommer att kontrollera att det kommer upp ett fel. Detta beror på att SELECT FROM-satsen antar att den data den hämtar troligen är en grupp av rader eller några punkter från en tabell.

>> VÄLJ * FRÅN ARRAY ['Aqsa', 'Raza', 'Saeed'];

Exempel 02: Konvertera matris till rader

ARRAY [] är en funktion som returnerar ett atomvärde. Som ett resultat passar det bara med SELECT och inte med FROM-satsen eftersom våra data inte fanns i "rad" -formen. Det är därför vi fick ett fel i exemplet ovan. Så här använder du funktionen UNNEST för att konvertera matriserna till rader medan din fråga inte fungerar med klausulen.

>> VÄLJ UNNEST (ARRAY ['Aqsa', 'Raza', 'Saeed']);

Exempel 03: Konvertera rader till matris

För att konvertera raderna till en array igen måste vi definiera den specifika frågan i en fråga för att göra det. Du måste använda de två SELECT-frågorna här. En intern markeringsfråga konverterar en matris till rader med funktionen UNNEST. Medan den externa SELECT-frågan åter konverterar alla dessa rader till en enda array, som visas i bilden som citeras nedan. Se upp; du måste använda mindre stavningar av 'array' i den externa SELECT-frågan.

>> VÄLJ matris (VÄLJ UNNEST (ARRAY ['Aqsa', 'Raza', 'Saeed']));

Exempel 04: Ta bort dubbletter med DISTINCT-klausul

DISTINCT kan hjälpa dig att extrahera dubbletter från alla typer av data. Det kräver dock nödvändigtvis användning av rader som data. Det betyder att den här metoden fungerar för heltal, text, floats och andra datatyper, men matriser är inte tillåtna. För att ta bort dubbletter måste du först konvertera din arraytypsdata till rader med UNNEST-metoden. Därefter skickas dessa konverterade datarader till DISTINCT-klausulen. Du kan få en glimt av utdata nedan, att matrisen har konverterats till rader, då har bara de olika värdena från dessa rader hämtats med hjälp av DISTINCT-satsen.

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

Om du behöver en array som utdata, använd array () -funktionen i den första SELECT-frågan och använd DISTINCT-satsen i nästa SELECT-fråga. Du kan se från den visade bilden att utdata har visats i matrisform, inte i raden. Medan utdata endast innehåller distinkta värden.

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

Exempel 05: Ta bort dubbletter medan du använder ORDER BY-klausul

Du kan också ta bort de dubbla värdena från flottörtypen, som visas nedan. Tillsammans med den distinkta frågan kommer vi att använda ORDER BY-klausulen för att få resultatet i sorteringsordningen för ett specifikt värde. Försök med nedanstående fråga i kommandoradsskalet för att göra det.

>> VÄLJ DISTINCT UNNEST ('2,85, 2.73, 2.85, 1.8, 2.73 ':: float []) BESTÄLLNING AV 1;

Först har matrisen konverterats till rader med funktionen UNNEST; sedan kommer dessa rader att sorteras i stigande ordning med ORDER BY-klausulen som visas nedan.

Om du vill konvertera raderna igen till en matris använder du samma SELECT-fråga i skalet medan du använder den med en liten alfabetisk array () -funktion. Du kan titta på utdata nedan att matrisen har konverterats till rader först, då har bara de olika värdena valts. Äntligen konverteras rader till en matris igen.

>> VÄLJ array (SELECT DISTINCT UNNEST ('2,85, 2.73, 2.85, 1.8, 2.73 ':: flyta []));

Slutsats:

Slutligen har du implementerat varje exempel från den här guiden. Vi hoppas att du inte har några problem när du utför UNNEST (), DISTINCT och array () -metoden i exemplen.

Battle for Wesnoth Tutorial
Slaget om Wesnoth är ett av de mest populära open source-strategispel som du kan spela just nu. Det här spelet har inte bara utvecklats under mycket l...
0 A.D. Handledning
Av de många strategispelen där ute, 0 A.D. lyckas framstå som en omfattande titel och ett mycket djupt, taktiskt spel trots att det är öppen källkod. ...
Unity3D självstudie
Introduktion till Unity 3D Unity 3D är en kraftfull spelutvecklingsmotor. Det är tvärplattform som gör att du kan skapa spel för mobil, webb, skrivbor...