sql >> Databáze >  >> RDS >> PostgreSQL

Hodnoty pole se zobrazují v řádku po řádku pro jediné id pomocí Postgresql

Chcete svá data seskupit, takže místo, kde se můžete podívat, je [seznam agregovaných funkcí] (https://www.postgresql.org/docs/current/functions-aggregate.html ), v tomto případě je to string_agg ( value text, delimiter text ) → text

Chcete zřetězit data ze jmen a oddělení a chcete, aby jména a oddělení byla v samostatných řádcích, jak je znázorněno v příkladu. K tomu E'\n' měl by být použit oddělovač:

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

Odpověď vám ukáže, jak na to a komentáře vysvětlují, proč ne . Volba je nyní na vás.

UPRAVIT 1

Pokud dáváte přednost zachování počtu záznamů a zobrazení ID s prvním řádkem skupiny, pak byste se měli podívat na funkce okna. Konkrétně 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;

SQL porovná aktuální id s id v předchozím řádku a vydá jej nebo hodnotu null.




  1. Replikace MySQL prostřednictvím tunelu SSH

  2. Získejte výsledky z mých vlastních příspěvků a příspěvků přátel

  3. Jak pomocí PL/SQL dostanu obsah souboru do blobu?

  4. MySQL Připravené příkazy se seznamem proměnných s proměnnou velikostí