sql >> Database teknologi >  >> RDS >> PostgreSQL

Array-værdier vises i række for række for enkelt id ved hjælp af Postgresql

Du vil gruppere dine data, så stedet at kigge på er i [sammenlagt funktionsliste] (https://www.postgresql.org/docs/current/functions-aggregate.html ), i dette tilfælde er det string_agg ( value text, delimiter text ) → text

Du vil sammenkæde dataene fra navne og afdelinger, og du ønsker at navne og afdelinger skal være i separate linjer som vist i eksemplet. Til det er E'\n' afgrænser skal bruges:

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

Svaret viser dig hvordan og kommentarerne forklarer hvorfor ikke . Valget er dit nu.

REDIGER 1

Hvis du foretrækker at bevare antallet af poster og vise ID'et med den første række af gruppen, så bør du se på vinduesfunktioner. Specifikt 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 sammenligner det aktuelle id med det i den foregående række og udsender det eller null-værdien.




  1. Manglende indekser i MS SQL eller optimering på ingen tid

  2. Dapper.net Oracle-parameter

  3. mysql antal rækker i timen

  4. Hvordan man trækker timer fra en dato i Oracle, så det også påvirker dagen