下記のような顧客マスタと購買履歴があり、購買履歴を顧客IDごとにsumで集計した結果を顧客マスタにある都道府県でクロス集計したいです。
顧客マスタ
|顧客ID|都道府県|氏名|…|
|:--|:--:|--:|
|001|東京都|山田太郎|…|
|002|大阪府|鈴木一郎|…|
|003|北海道|佐藤華子|…|
購買履歴
|顧客ID|購入日|金額|…|
|:--|:--:|--:|
|001|2021/1/1|1000|…|
|001|2021/1/2|2000|…|
|002|2021/1/1|1500|…|
|002|2021/1/2|2500|…|
|003|2021/1/1|1200|…|
|003|2021/1/2|1000|…|
購買履歴を顧客IDでグループ化するところまではできました。
sql
1select 顧客ID,sum(金額) 2from 購買履歴 3group by 顧客id order by 顧客id; 4
↓
顧客ID | 合計金額 |
---|---|
001 | 3000 |
002 | 4000 |
003 | 2200 |
これを合計金額を範囲別に顧客マスタにある都道府県と件数としてクロス集計したいのですが、下記のSQLでは
sql
1select 都道府県 2,sum(case when sum(金額) >= 3000000 then 1 else 0 end) as "300万以上" 3,sum(case when sum(金額) >= 2000000 then 1 else 0 end) as "200万以上" 4,sum(case when sum(金額) >= 1000000 then 1 else 0 end) as "100万以上" 5,sum(case when sum(金額) >= 500000 then 1 else 0 end) as "50万以上" 6,sum(case when sum(金額) >= 200000 then 1 else 0 end) as "20万以上" 7,sum(case when sum(金額) < 200000 then 1 else 0 end) as "20万未満" 8from 購買履歴 left outer join 顧客マスタ on 顧客マスタ.顧客ID = 購買履歴.顧客id 9group by 顧客id,都道府県 order by 顧客id 10
下のエラーになってしまいます。
aggregate function calls cannot be nested
得たい結果としては下記のようになります。(単位は人)
|都道府県|300万以上|200万以上|100万以上|…|
|:--|--:|--:|--:|
|北海道|150|253|567|…|
|青森|222|678|780|…|
|岩手|242|198|345|…|
|宮城|888|876|323|…|
#環境
macローカル PostgreSQL 13.4(pgadmin4)
レコード数は
顧客マスタ:約130万行
購買履歴:約240万行
です。
ご教示いただけないでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/05 02:31
2021/10/05 03:39 編集
2021/10/05 06:44