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。

这可能需要为 How to find changed prices in last two purchase invoices

+1

价格在表中的OrderDetail第二列::文本投公司变更类型为文本得到的字符串价目表的Postgres。它可以写成标准sql – Andrus

+1

中的'cast(price as text)'当你说'如何获得每个产品的不同价格清单?'时,你的意思是每个产品单行吗? –

+0

是的,每个产品的单行包含不同价格列表的升序。第二列可能也是数组而不是字符串 – Andrus

回答

2

由于您的错误信息创建的答案,从what I read here on Stack Overflow从像@GordonLinoff大师,您不能使用DISTINCTSTRING_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 
+0

谢谢,它的工作原理。我预计这有一些本地语法。 – Andrus

相关问题