sql >> Base de Datos >  >> RDS >> PostgreSQL

Los valores de matriz se muestran fila por fila para una identificación única usando Postgresql

Desea agrupar sus datos, por lo que el lugar para buscar es [lista de funciones agregadas] (https://www.postgresql.org/docs/current/functions-aggregate.html ), en este caso es string_agg ( value text, delimiter text ) → text

Desea concatenar los datos de nombres y departamentos y quiere que los nombres y departamentos estén en líneas separadas como se muestra en el ejemplo. Para eso el E'\n' debe usarse el delimitador:

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

La respuesta le muestra cómo y los comentarios explican por qué no . La elección es tuya ahora.

EDITAR 1

Si prefiere conservar la cantidad de registros y mostrar la ID con la primera fila del grupo, entonces debe buscar funciones de ventana. Específicamente 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;

El sql compara la identificación actual con la de la fila anterior y la genera o un valor nulo.