gpt4 book ai didi

postgresql - GROUP_CONCAT 用于 PostgreSQL 中的类似记录

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

我在 PostgreSQL 中有以下查询:

SELECT sale_order.id,sale_order.name AS orden, now()::date AS hoy,
sale_order.create_date::date, split_part(res_partner.name,' ',1) AS cliente,
res_partner.email,sale_order.amount_total,res_currency.name FROM
sale_order,product_pricelist,res_currency,res_partner WHERE
sale_order.partner_id = res_partner.id
AND sale_order.pricelist_id = product_pricelist.id
AND product_pricelist.currency_id = res_currency.id
AND sale_order.state = 'sent'
ORDER BY sale_order.create_date DESC;

结果集如下所示:

658, SO658, 2015-05-17, 2015-04-16, Alejandro, some@email.com, 14272.00, MXN
654, SO654, 2015-05-17, 2015-04-15, Edgar, one@email.com, 4994.96, MXN
653, SO653, 2015-05-17, 2015-04-15, Edgar, one@email.com, 3007.29, USD

如您所见,第二条和第三条记录以某种方式重复,这是因为它是同一用户但具有不同的 ID、订单名称、日期等。

我想做的是忽略日期和金额,但忽略 GROUP_CONCAT 订单名称,因此最终结果如下所示:

SO658, Alejandro, some@email.com
SO653 & SO654, Edgar, one@email.com

如您所见,我删除了不必要的列和 GROUP_CONCAT 属于同一用户的订单名称,因此最终每个用户将只有一条记录显示他们的所有订单名称。

我如何在 PostgreSQL 中执行此操作?

谢谢!

最佳答案

在没有表定义或 SQL fiddle 的情况下尝试查询有点困难,但是:

您可以GROUP BY clienteemail 然后使用array_agg,它将返回一个阵列。如果您确实需要字符串,可以使用 string_agg(sale_order.name, ' & '),但数组通常更易于使用。

SELECT array_agg(sale_order.name) AS orden,
split_part(res_partner.name,' ',1) AS cliente,
res_partner.email
FROM sale_order,product_pricelist,res_currency,res_partner
WHERE sale_order.partner_id = res_partner.id
AND sale_order.pricelist_id = product_pricelist.id
AND product_pricelist.currency_id = res_currency.id
AND sale_order.state = 'sent'
GROUP BY cliente, email;

关于postgresql - GROUP_CONCAT 用于 PostgreSQL 中的类似记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30286435/

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