如何根据每个产品的单排产品获得不同的价格
问题描述:
订单包含价格不同的同一产品。如何根据每个产品的单排产品获得不同的价格
如何获得每个产品的不同价格清单,每个产品一行?
我试图
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
答
由于您的错误信息创建的答案,从what I read here on Stack Overflow从像@GordonLinoff大师,您不能使用DISTINCT
内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
+0
谢谢,它的工作原理。我预计这有一些本地语法。 – Andrus
价格在表中的OrderDetail第二列::文本投公司变更类型为文本得到的字符串价目表的Postgres。它可以写成标准sql – Andrus
中的'cast(price as text)'当你说'如何获得每个产品的不同价格清单?'时,你的意思是每个产品单行吗? –
是的,每个产品的单行包含不同价格列表的升序。第二列可能也是数组而不是字符串 – Andrus