CodeGym /Kurse /SQL SELF /Daten aus einem Array extrahieren: unnest()...

Daten aus einem Array extrahieren: unnest(), array_length(), array_position()

SQL SELF
Level 35 , Lektion 2
Verfügbar

Mit Arrays zu arbeiten bedeutet nicht nur, sie zu erstellen und zu speichern – oft musst du einzelne Elemente rausziehen oder ihren Inhalt analysieren. PostgreSQL bietet dafür ein paar eingebaute Funktionen. Lass uns die mal der Reihe nach anschauen.

Funktion unnest(): Array entpacken

Die Funktion unnest() entpackt ein Array und macht aus jedem Element eine eigene Zeile. Das ist super praktisch, wenn du mit Array-Daten wie mit einer Tabelle arbeiten willst.

Beispiel 1: Einfaches Entpacken eines Arrays

Angenommen, wir haben ein Array mit Fakultätsnamen:

SELECT ARRAY['Informatik', 'Mathematik', 'Physik'] AS fakultaeten;

Jetzt wollen wir jedes Element als eigene Zeile rausziehen. Wir nehmen unnest():

SELECT unnest(ARRAY['Informatik', 'Mathematik', 'Physik']) AS fakultaet;

Ergebnis:

fakultaet
Informatik
Mathematik
Physik

Beispiel 2: Array in einer Tabelle entpacken

Nehmen wir an, wir haben eine Tabelle courses:

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,
    course_name TEXT,
    tags TEXT[]
);

INSERT INTO courses (course_name, tags)
VALUES
    ('Algorithmen', ARRAY['Programmierung', 'Informatik']),
    ('Lineare Algebra', ARRAY['Mathematik', 'Algebra']),
    ('Physik Grundlagen', ARRAY['Physik', 'Allgemein']);

Jetzt holen wir alle Tags aus dem Array raus:

SELECT course_name, unnest(tags) AS tag
FROM courses;

Ergebnis:

course_name tag
Algorithmen Programmierung
Algorithmen Informatik
Lineare Algebra Mathematik
Lineare Algebra Algebra
Physik Grundlagen Physik
Physik Grundlagen Allgemein

Du siehst, jedes Array-Element wird zu einer eigenen Tabellenzeile.

Funktion array_length(): Array-Größe bestimmen

Die zweite wichtige Funktion für Arrays ist array_length(). Sie gibt die Länge des Arrays (also die Anzahl der Elemente) für die angegebene Dimension zurück.

Beispiel 1: Anzahl der Elemente in einem eindimensionalen Array

Nehmen wir ein Array:

SELECT ARRAY['Apfel', 'Banane', 'Orange'] AS fruechte;

Wenn wir wissen wollen, wie viele Früchte im Array sind:

SELECT array_length(ARRAY['Apfel', 'Banane', 'Orange'], 1) AS laenge;

Ergebnis:

laenge
3

Hier steht 1 für die Dimension des Arrays. Arrays in PostgreSQL können mehrere Dimensionen haben (z.B. zweidimensionale Arrays), aber das schauen wir uns ein andermal an.

Beispiel 2: Anzahl der Elemente im Array einer Tabelle

Schauen wir mal, wie viele Tags jeder Kurs hat:

SELECT course_name, array_length(tags, 1) AS anzahl_tags
FROM courses;

Ergebnis:

course_name anzahl_tags
Algorithmen 2
Lineare Algebra 2
Physik Grundlagen 2

Die Funktion sagt einfach: „Hey, hier sind zwei Elemente!“, und das macht die Datenanalyse schon viel einfacher.

Funktion array_position(): Wert im Array suchen

Stell dir vor, du suchst ein bestimmtes Element im Array. Die Funktion array_position() hilft dir dabei: Sie gibt die Position des ersten Vorkommens zurück.

Beispiel 1: Element suchen

Angenommen, wir haben ein Array:

SELECT ARRAY['Rot', 'Blau', 'Gruen', 'Gelb'] AS farben;

Versuchen wir, die Position von "Blau" zu finden:

SELECT array_position(ARRAY['Rot', 'Blau', 'Gruen', 'Gelb'], 'Blau') AS position;

Ergebnis:

position
2

Wenn das Element nicht da ist, gibt die Funktion NULL zurück. Lass uns das testen:

SELECT array_position(ARRAY['Rot', 'Blau', 'Gruen', 'Gelb'], 'Schwarz') AS position;

Ergebnis:

position
NULL

Beispiel 2: Suche im Array einer Tabelle

Du willst wissen, welcher Kurs den Tag "Informatik" hat. Erstmal suchen wir die passenden Zeilen:

SELECT course_name, array_position(tags, 'Informatik') AS position
FROM courses;

Ergebnis:

course_name position
Algorithmen 2
Lineare Algebra NULL
Physik Grundlagen NULL

Jetzt filtern wir, damit nur die Zeilen bleiben, wo der Tag drin ist:

SELECT course_name
FROM courses
WHERE array_position(tags, 'Informatik') IS NOT NULL;

Ergebnis:

course_name
Algorithmen

Mit array_position() findest du schnell Daten im Array – das macht sie zu einer der wichtigsten Funktionen für Arrays in PostgreSQL.

Praxiseinsatz der Funktionen

  • unnest() — nutze das, um Arrays in Zeilen umzuwandeln. Das ist wichtig für Datenanalyse, Reports und die Arbeit mit Tags.
  • array_length() — perfekt, um die Länge von Arrays zu checken. Zum Beispiel kannst du damit validieren, dass ein Array nicht leer ist.
  • array_position() — super Tool, um Elemente zu suchen, egal ob Produktkategorien, Teilnahme eines Studenten an einem Projekt oder Keywords in einer Beschreibung.

Typische Fehler bei der Nutzung der Funktionen

  1. unnest() kann die Zeilenzahl verdoppeln, wenn du es auf Arrays in mehreren Spalten gleichzeitig anwendest. Das kannst du mit JOIN LATERAL oder CROSS JOIN lösen – aber sei vorsichtig.
  2. array_length() gibt NULL zurück, wenn das Array leer ist. Wenn dein Array leer sein kann, prüfe das extra.
  3. array_position() kann NULL liefern, wenn das Element fehlt. Also immer daran denken und in Filtern (IS NOT NULL) berücksichtigen.

Beispiele aus der echten Praxis

Arrays in PostgreSQL sind nicht nur Theorie, sondern ein Tool, das in echten Projekten richtig praktisch ist. Zum Beispiel: Du betreibst einen Blog und jeder Artikel hat eine Liste von Tags – mit Arrays kannst du easy nach Themen filtern oder sogar die Top-Kategorien zusammenstellen.

Oder du analysierst das Verhalten von Usern, die mehrere Kurse oder Produkte auswählen. All diese Präferenzen speicherst du bequem im Array – und kannst sie genauso bequem auswerten.

Und Arrays helfen auch bei der Validierung: Mit array_length() kannst du zum Beispiel die Anzahl der Elemente begrenzen – etwa damit ein User nicht mehr als fünf Sachen auswählt.

2
Aufgabe
SQL SELF, Level 35, Lektion 2
Gesperrt
Entpacken eines Arrays mit `unnest()`
Entpacken eines Arrays mit `unnest()`
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION