sql >> Databasteknik >  >> RDS >> PostgreSQL

Arrayvärden visas i rad för rad för enstaka id med Postgresql

Du vill gruppera dina data, så platsen att leta är i [sammanställd funktionslista] (https://www.postgresql.org/docs/current/functions-aggregate.html ), i det här fallet är det string_agg ( value text, delimiter text ) → text

Du vill sammanfoga data från namn och avdelningar och du vill att namnen och avdelningarna ska vara på separata rader som visas i exemplet. För det E'\n' avgränsare ska användas:

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 visar dig hur du gör och kommentarerna förklarar varför inte . Valet är ditt nu.

REDIGERA 1

Om du föredrar att bevara antalet poster och visa ID med den första raden i gruppen, bör du titta på fönsterfunktioner. Närmare bestämt 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 jämför nuvarande id med det i föregående rad och matar ut det eller nollvärdet.




  1. Hur man ansluter till MySQL med Node.js

  2. 5 problemfria tips för att använda SQL UPDATE Statement med JOIN

  3. Hur man får de senaste 15 dagarna i MySQL

  4. SUM() fungerar inte i MySQL :SUM() med DISTINCT