0

顧客から注文までのような親子テーブルがあります。各注文は 1 人の顧客にのみ属する必要があり、顧客はゼロ、1 つ、または複数の注文を持っています。

COUNTS の注文の度数分布を取得するにはどうすればよいですか。したがって、出力は次のようになります: 0 ~ 100 の注文を持つ顧客の数 101 ~ 200 の注文を持つ顧客の数 201 ~ 300 の注文を持つ顧客の数。

注文数だけで、顧客 ID は気にしません。

WIDTH_BUCKET 関数を使用しようとしましたが、各バケット内のアイテムの数をグループ化およびカウントしません。WIDTH_BUCKET 以外に別の方法があるかもしれません。

ありがとうアレックス

4

1 に答える 1

0

私は昨夜、この問題についていくつかの調査を行い、神の恵みにより、あなた (OK、あなたのビジネス パートナー) がバケット サイズを定義し、配布頻度カウントをカウントできる解決策を見つけました。

ここにあります -- (この Web サイトの形式が下手で申し訳ありません) ご協力ありがとうございました!! アレックス

with starter as(
select cust.customer_id, count(o.order_id) as row_count
from CUSTOMER cust  LEFT JOIN ORDER o
using (customer_id)
where cust.last_update_user = 'MDM_ETL' and
o.last_update_user = 'MDM_ETL' -- and
group by cust.customer_id
order by row_count desc)
select 5 , '2000 or more' as cnt_of_orders, count(starter.customer_id) as          
nmb_customers_with_this_cnt from starter where starter.row_count >= 2000
union 
select 4, '1500 - 1999' as cnt_of_orders, count(starter.customer_id) as    
nmb_customers_with_this_cnt from starter where starter.row_count between 1500 and 1999
union 
select 3, '1000 - 1499' as cnt_of_orders, count(starter.customer_id) as    
nmb_customers_with_this_cnt from starter where starter.row_count between 1000 and 1499
union 
select 2, '500 - 999' as cnt_of_orders, count(starter.customer_id) as   
nmb_customers_with_this_cnt from starter where starter.row_count between 500 and 999
union 
select 1, '0 - 499' as cnt_of_orders, count(starter.customer_id) as    
nmb_customers_with_this_cnt from starter where starter.row_count between 0 and 499 
于 2012-12-07T18:29:57.963 に答える