2016-08-17 3 views
0

私はテーブルCustomersとテーブルCustomercardsを持っています。顧客は複数のカスタムメイドを持つことができます。テーブルCustomercardsはcustomer_idで顧客を参照しています。発生する数値の数によるグループ

私はこのようなカードの数によってグループ化された顧客ごとのcustomercardsをカウントし、その結果を出力クエリを、書きたいと思います:

cards count 
0  50  
1  37 
2  13 
3  5 
4  1 

現在、私は顧客をカウントクエリを持っていますgroup byhavingを使用してカードの所定のカウント。しかし、このクエリを複数回使用して、さまざまな量のカスタムメイドを数えなければなりません。例:

SELECT c.customer_id 
FROM CUSTOMERS c JOIN CUSTOMERCARDS cc ON c.customer_id = cc.customer_id 
group by c.customer_id 
having count(*) = 2; 

これを1つのクエリに入れる方法はありますか?

答えて

1

私はこれを「ヒストグラムのヒストグラム」クエリと呼びます。

SELECT cnt, COUNT(*), MIN(customer_id), MAX(customer_id) 
FROM (SELECT c.customer_id, COUNT(*) as cnt 
     FROM CUSTOMERS c JOIN 
      CUSTOMERCARDS cc 
      ON c.customer_id = cc.customer_id 
     GROUP BY c.customer_id 
    ) c 
GROUP BY cnt 
ORDER BY cnt; 

私は、私は、このようなクエリを実行するとき、それは例を持っているために使用見つけるという理由だけで、最小と最大の顧客IDが含まれます。次の2件の集計を使用することができます。

注:あなたがこれを簡素化することができますので、あなたが実際に、JOINは必要ありません。

SELECT cnt, COUNT(*), MIN(customer_id), MAX(customer_id) 
FROM (SELECT cc.customer_id, COUNT(*) as cnt 
     FROM CUSTOMERCARDS cc 
     GROUP BY cc.customer_id 
    ) c 
GROUP BY cnt 
ORDER BY cnt; 
+0

これは私が探していたまさにです、ありがとうございます。私は、これらの2つのグループ・バイ・セクションを使って作業を混乱させました。今それは働いています:) – htz

関連する問題