gpt4 book ai didi

postgresql - 将多行合并为单行PostgreSQL

转载 作者:行者123 更新时间:2023-11-29 13:18:09 24 4
gpt4 key购买 nike

我有一个名为 deliveries 的主表,它与 deliveries_languages 为 dl、deliveries_markets dm 和 deliveries_tags dt 具有一对多关系,外键为 delivery_id。这 3 个表分别与 languages 、 markets 和 tags 具有一对一的关系。另外,交付,表与公司有一对一的关系,并且有 company_is 作为外键。以下是我编写的查询:

SELECT deliveries.*, languages.display_name, markets.default_name, tags.default_name, companies.name
FROM deliveries
JOIN deliveries_languages dl ON dl.delivery_id = deliveries.id
JOIN deliveries_markets dm ON dm.delivery_id = deliveries.id
JOIN deliveries_tags dt ON dt.delivery_id = deliveries.id
JOIN languages ON languages.id = dl.language_id
JOIN markets ON markets.id = dm.market_id
JOIN tags ON tags.id = dt.tag_id
JOIN companies ON companies.id = deliveries.company_id
WHERE
deliveries.name ILIKE '%new%' AND
deliveries.created_by = '5f331347-fb58-4f63-bcf0-702f132f97c5' AND
deliveries.deleted_at IS NULL
LIMIT 10

这里我得到了多余的 delivery_id,因为每个 delivery_id 都有多种语言、市场和标签。我想对不同的 delivery_ids 使用限制,同时,我希望将这些多种语言、市场和标签分组并填充在一行中。

目前它看起来像:

delivery_id | name |languages | markets  | tags
------------|------|----------|----------|-----------
1 | d1 |en | au | tag1
1 | d1 |de | sw | tag2
2 | d2 |en | au | tag1
2 | d2 |de | sw | tag2
3 | d3 |en | au | tag1
3 | d3 |de | sw | tag2

有什么方法可以使数据如下所示:

delivery_id | name |languages | markets  | tags
------------|------|----------|----------|-----------
1 | d1 |en, de | au,sw | tag1, tag2
2 | d2 |en, de | au,sw | tag1, tag2
3 | d3 |en, de | au,sw | tag2, tag3

附言上面的表只包含部分数据,实际查询返回更多的列,但上面的列很重要。有人可以帮我解决这个问题吗。

最佳答案

您可以像这样将 GROUP BYstring_agg 一起使用:

SELECT deliveries.deliver_id, deliver.name, 
string_agg(distinct languages.display_name, ',' order by languages.display_name) as langs,
string_agg(distinct markets.default_name, ',' order by markets.default_name) as markets,
string_agg(distinct tags.default_name, ',' order by tags.default_name) as tags,
string_agg(distinct companies.name, ',' order by companies.name) as companies
...
GROUP BY deliveries.deliver_id, deliver.name;

关于postgresql - 将多行合并为单行PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46143606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com