sql >> Database >  >> RDS >> PostgreSQL

Arraywaarden worden rij voor rij weergegeven voor een enkele id met Postgresql

U wilt uw gegevens groeperen, dus de plaats om te zoeken is in [aggregate function list] (https://www.postgresql.org/docs/current/functions-aggregate.html ), in dit geval is het string_agg ( value text, delimiter text ) → text

U wilt de gegevens van namen en afdelingen samenvoegen en u wilt dat de namen en afdelingen in aparte regels staan, zoals in het voorbeeld. Daarvoor de E'\n' scheidingsteken moet worden gebruikt:

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

Het antwoord laat je zien hoe je en de opmerkingen leggen uit waarom niet . De keuze is nu aan jou.

BEWERK 1

Als u liever het aantal records wilt behouden en de ID met de eerste rij van de groep wilt weergeven, moet u kijken naar vensterfuncties. In het bijzonder 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;

De sql vergelijkt de huidige id met die van de vorige rij en geeft deze of een null-waarde uit.




  1. Voer een alambiek-upgrade uit in meerdere schema's

  2. Hoe herstel ik een dumpbestand van mysqldump met kubernetes?

  3. PHP en het inkapselen van MySQL-rijen in een JSON-array

  4. Hoe de ODP.NET-verbindingspool op verbindingsfouten wissen?