如何通过每个产品单行的产品获得不同的价格
How to get distinct prices by product with single row per product
订单包含不同价格的相同产品。
如何按顺序获取每个产品的不同价格列表,每个产品一行?
我试过了
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
鉴于您的错误消息,以及来自@GordonLinoff 等专家的 what I read here on Stack Overflow,您不能在 STRING_AGG
中使用 DISTINCT
。一个快速的解决方法是首先子查询您的 table 并在那里使用 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 上测试了这个查询,returns 这个:
product | string_agg
text | text
A | 100,200
B | 200
订单包含不同价格的相同产品。
如何按顺序获取每个产品的不同价格列表,每个产品一行?
我试过了
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
鉴于您的错误消息,以及来自@GordonLinoff 等专家的 what I read here on Stack Overflow,您不能在 STRING_AGG
中使用 DISTINCT
。一个快速的解决方法是首先子查询您的 table 并在那里使用 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 上测试了这个查询,returns 这个:
product | string_agg
text | text
A | 100,200
B | 200