1

订单包含具有不同价格的相同产品。

如何按顺序获取每个产品的不同价格列表,每个产品一行?

我试过

SELECT product, string_AGG(DISTINCT price::text, ',' ORDER BY price)
 FROM (VALUES ('A', 100), ('A', 200) , ('B', 200))
orderdetail (product, price)
GROUP BY product

但有错误

ERROR:  in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list
LINE 1: ...ct, string_AGG(DISTINCT price::text, ',' ORDER BY price DESC...

如何解决这个问题?

使用 Postgres 9.4。

这可能是为 如何在最近两张采购发票中查找更改价格创建答案所必需的

4

1 回答 1

2

鉴于您的错误消息,以及我在 Stack Overflow 上从 @GordonLinoff 等大师那里读到的内容,您不能使用DISTINCTinside STRING_AGG。一个快速的解决方法是先对您的表进行子查询,然后使用DISTINCT它来删除重复项。

SELECT t.product, STRING_AGG(t.price::text, ',' ORDER BY price)
FROM
(
    SELECT DISTINCT product, price
    FROM (VALUES ('A', 100), ('A', 100), ('A', 200), ('B', 200), ('B', 200))
    orderdetail (product, price)
) t
GROUP BY t.product

我在 Postgres 上测试了这个查询,它返回:

product | string_agg
text    | text
A       | 100,200
B       | 200
于 2016-10-04T06:11:03.350 回答