Postgresql: значения нескольких строк в одной строке - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть следующая база данных:

Автомобиль: {[CarID, HorsePower, Brand, HeadDesigner]}

DesignsCar: {[CarID, DesID]}

Дизайнер: {[DesID, Name]}

Вы должны заметить, что, хотя у каждого автомобиля есть только 1 HeadDesigner, несколько человек могут проектировать автомобили (как в работе с ними). ​​

Скажем, у меня 10 автомобилейв моей базе данных.Для CarID (1..9) только один DesID на CarID в DesignsCar.Однако для carID 10 у нас работают 3 человека (carID имеет 3 записи в DesignsCar, потому что над ним работали 3 человека).

Скажи, что я делаю это:

select *
from car c 
left outer join designscar ds on c.carid = ds.carid 
left outer join designer d on frb.persnr = r.persnr

Это дает мне 12 строк, когда я хочу только 10. Причина, почему это дает мне 12 строк, должна быть ясна: для carID 10 у нас есть 3люди, работающие над этим (carID имеет 3 записи в DesignsCar, потому что над ним работали 3 человека).

Надеюсь, я хорошо объяснил эту проблему, и вот мой вопрос:

Как мне изменить приведенный выше запрос, чтобы я получил 10 строк.Для CarID 10 я бы хотел, чтобы три дизайнера были написаны в одном столбце (например, через запятую, но все работает, пока в одном столбце).

Возможно ли это?

1 Ответ

0 голосов
/ 16 декабря 2018

Вам необходимо агрегировать значения.Вот одна из возможностей:

select c.*, 
       array_agg(d.name) as designer_names
from car c left outer join
     designscar ds
     on c.carid = ds.carid left outer join
     designer d
     on frb.persnr = r.persnr
group by c.carid ;   -- allowed assuming `carid` is the primary key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...