0
votes

Combinez les résultats dans la matrice dans PostgreSQL

J'ai eu ce qui suit postgreSQL Tables: xxx

Je veux obtenir une date avec tous ses participants en tant que tableau. Par exemple: xxx

donc j'ai créé la requête suivante: xxx

mais il en résulte: < Pré> xxx

Comment combiner ces lignes en une rangée avec tous ses user_ids en tant que participants?


1 commentaires

1. Veuillez nous montrer les données d'exemple. Seul le résultat n'est pas vraiment utile. 2. Il semble que vous souhaitiez créer un objet JSON avec une matrice JSON. Pas un tableau simple. Est-ce correct?


3 Réponses :


0
votes

Vous pouvez faire de tels:

select
    dates.id,
    dates.start,
    dates.end,
    json_build_array(
        select user_id from date_participants where date_id = dates.id
    ) as participants
from
    dates


0 commentaires

2
votes

Vous pouvez utiliser array_agg (user_id) code> dans le cadre de votre instruction SELECT pour agréger tout votre participant à un tableau. Comme il s'agit de l'agrégation et que le résultat doit être produit dans une ligne, vous devez utiliser le groupe par code> ainsi que dans votre requête

quelque chose comme: em> p >

SELECT
  d.id,d.start,d.end,
  array_agg(dp.user_id) as participants
FROM
  dates d, date_participants dp      
WHERE d.id=dp.date_id AND d.ground_event_id = 252
group by d.id,d.start,d.end;


2 commentaires

. . Pourquoi convertissez-vous la valeur en texte? Et avez-vous entendu parler de rejoindre ?


@Gordonlinoff merci pour vos commentaires. En fait, cela n'a pas besoin. Réponse mise à jour.



-1
votes

J'ai une requête de travail avec l'aide de l'agrégat:

SELECT
  dates.id,
  dates.start,
  dates.end,
  array_agg(date_participants.user_id) as participants 
FROM
  dates,
  date_participants
WHERE dates.id = date_participants.date_id AND dates.ground_event_id = 252
GROUP BY dates.id;


0 commentaires