PostgreSQL
顧客テーブル、トランザクションテーブルを調べ、結果が顧客が購入した製品を示すテーブルになる1対多のクエリを作成しようとしています。
table: customers
id
1
2
3
4
5
table: purchases
custid product
1 software 1
1 software 2
3 software 2
3 software 3
4 software 1
5 software 1
5 software 2
5 software 3
私が得たい結果は次のとおりです。
custid software1 software2 software3
1 TRUE TRUE NULL
3 NULL TRUE TRUE
4 TRUE NULL NULL
5 TRUE TRUE TRUE
使用する必要があることがわかりますがcrosstab
(postgreSQL
サポートされていないためpivot
)、構文についてはよくわかりません。出力に次の行が含まれていれば問題ありません。
custid software1 software2 software3
2 NULL NULL NULL
どちらかの方法でそれを行う方が簡単であれば、それは実際には問題ではありません。
何も購入しなかった顧客を無視します。これは、少し短くて速いためです。
SELECT * FROM crosstab(
'SELECT custid, product, true FROM purchases ORDER BY 1, 2'
, $$VALUES ('software 1'::text), ('software 2'), ('software 3')$$)
AS ct (custid int, software1 bool, software2 bool, software3 bool);
詳細:
ここでの小さな問題の1つboolean
は、テーブルに値がないため、クエリに値を追加する必要があることです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加