1

注文には、異なる価格の同じ製品が含まれています。

製品ごとに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 を使用しています。

これはおそらく、最後の 2 つの購入請求書で変更された価格を見つける方法の回答を作成するために必要です

4

1 に答える 1

2

あなたのエラーメッセージと、@GordonLinoffのような専門家からStack Overflowでここで読んだことDISTINCTから、 insideを使用することはできません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 に答える