sql - Postgresql:一行中多行的值
问题描述
我有以下数据库:
汽车:{[CarID、马力、品牌、HeadDesigner]}
设计汽车:{[CarID, DesID]}
设计师:{[DesID, 姓名]}
您应该注意,虽然每辆汽车只有 1 个 HeadDesigner,但多人可以设计汽车(就像在工作中一样)。
假设我的数据库中有 10 辆汽车。对于 CarID (1..9),DesignsCar 中的每个 CarID 只有一个 DesID。然而,对于 carID 10,我们有 3 个人在处理它(carID 在 DesignsCar 中有 3 个条目,因为 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 在 DesignsCar 中有 3 个条目,因为 3 个人处理它)。
我希望我已经很好地解释了这个问题,所以我的问题来了:
如何修改上面的查询以便得到 10 行。对于 CarID 10,我希望将 3 位设计师写在一列中(例如,逗号分隔,但只要它在一列中就可以了)。
那可能吗?
解决方案
您需要汇总这些值。这是一种可能性:
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
推荐阅读
- r - How to generate new id by comparing two data frames
- python - pyTelegramBotAPI search in text of the message with if/elif/else construction
- javascript - converting recursive function to arrow function in javascript
- android - Android Studio Design not displaying anything
- java - windows 10命令提示符的javac激活错误
- regex - 接受数字范围的模式?
- c# - 当单个类需要不同的结构时如何做出共同的行为
- c# - WPF每次打开和关闭窗口时增加内存
- javascript - 从 onclick 回调调用时,console.log 未显示 [javascript]
- django - 如何在 signup_form.html 中添加电子邮件地址 - Django-crispy-forms