PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Array-Werte werden in der Zeile für Zeile für einzelne IDs mit Postgresql angezeigt

Sie möchten Ihre Daten gruppieren, sodass Sie in [Aggregate Function List] (https://www.postgresql.org/docs/current/functions-aggregate.html ), in diesem Fall ist es string_agg ( value text, delimiter text ) → text

Sie möchten die Daten von Namen und Abteilungen verketten, und Sie möchten, dass die Namen und Abteilungen in separaten Zeilen stehen, wie im Beispiel gezeigt. Dafür das E'\n' Trennzeichen sollte verwendet werden:

SELECT
  id,
  string_agg(name, E'\n') as names,
  string_agg(dept, E'\n') as depts
FROM 
  data
GROUP BY
  id
ORDER BY
  id;

Die Antwort zeigt Ihnen wie es geht und die Kommentare erklären warum nicht . Sie haben jetzt die Wahl.

BEARBEITEN 1

Wenn Sie es vorziehen, die Anzahl der Datensätze beizubehalten und die ID mit der ersten Zeile der Gruppe anzuzeigen, sollten Sie sich mit Fensterfunktionen befassen. Insbesondere LAG .

SELECT
  CASE 
    WHEN id IS DISTINCT FROM LAG(id) OVER(order by id) THEN id 
    ELSE null 
  END as id,
  name,
  dept
FROM 
  data
order by
  data.id;

Die SQL vergleicht die aktuelle ID mit der der vorherigen Zeile und gibt sie oder einen Nullwert aus.