2016-12-12 4 views
1

私は顧客あたりの注文数を数えたいと思っているorder_item_idcustomer_idorder_idのテーブルを持っています(表1)。私はこれを試してみました(と、より多くの)注文数を集計します

|numberOfOrders|customer_id| 
|  2  | 1  | 
|  1  | 2  | 
|  2  | 3  | 

CREATE TABLE X AS 
    SELECT 
     customer_id, 
     COUNT(order_id) AS `numberOfOrders` 
    FROM Table1 T1 
    GROUP BY customer_id; 

問題があること、である残念ながら、複数の物品との順序は同じorder_id

|order_item_id|order_id|customer_id| 
|  2  | 30 | 1  | 
|  3  | 30 | 1  | 
|  4  | 42 | 1  | 
|  5  | 33 | 2  | 
|  11  | 32 | 3  | 
|  12  | 33 | 2  | 
|  13  | 33 | 2  | 
|  19  | 69 | 3  | 

期待される成果を持っていますこのソリューションでは、注文数ではなくすべての商品を数えます。したがって、顧客1の注文数は3(2ではない)、顧客2は3(1ではない)です。

Mysqlクエリを使用して大きなデータベースでこれをどのように解決できますか?

答えて

2

は期待どおりにデータをSELECTするには、以下のソリューションを試してみてください。

SELECT COUNT(DISTINCT order_id) AS numberOfOrders, customer_id 
FROM table1 
GROUP BY customer_id 

デモ:http://sqlfiddle.com/#!9/ee8f62/1/0

+0

ブラボー!! 2つのグループではなく最適化された回答 –

0

オプションが二回GROUPを行うことである可能性があります。顧客ごとの注文数の二GROUPで包まれた注文ごとの項目数、のためGROUPまず:

/* second group */ 
SELECT customer_id 
    , count(*)  AS number_of_orders 
    FROM ( 
     /* first group */ 
     SELECT order_id 
       , customer_id 
       , count(*)   AS order_item_count 
      FROM Table1 
      GROUP BY order_id, customer_id 
     ) a 
GROUP BY customer_id