1

次のテーブルがあります: ProductSales

+-------+-----------+--------+-----------+
|prod_id|customer_id|order_id|supplier_id|
+-------+-----------+--------+-----------+
|   1   |     1     |   1    |     1     |
+-------+-----------+--------+-----------+
|   2   |     4     |   2    |     2     |
+-------+-----------+--------+-----------+
|   3   |     1     |   1    |     1     |
+-------+-----------+--------+-----------+
|   4   |    NULL   |  NULL  |   Null    |
+-------+-----------+--------+-----------+
|   5   |     1     |   1    |     2     |
+-------+-----------+--------+-----------+
|   6   |     4     |   7    |     1     |
+-------+-----------+--------+-----------+
|   7   |     1     |   1    |     3     |
+-------+-----------+--------+-----------+

SELECT クエリがあります。

SELECT customer_id AS customer, count(*) AS prod_count
     , count(DISTINCT order_id) as orders 
  FROM ProductSales 
 WHERE supplier_id=1        
 GROUP BY customer_id  
HAVING customer_id<>'NULL'

これにより、結果が生成されます。

+--------+----------+------+
|customer|prod_count|orders|
+--------+----------+------+
|   1    |    2     |   1  |
+--------+----------+------+
|   4    |    1     |   1  |
+--------+----------+------+

私が達成しようとしているのにどこにも行き着かないのは、結果に 4 番目の列を追加して、各顧客の現在のサプライヤーのみに属する order_id の数を表示することです。

+--------+----------+------+-------------+
|customer|prod_count|orders|Unique Orders|
+--------+----------+------+-------------+
|   1    |    2     |   1  |      0      | } Order '1' is connected with two supplier_ids
+--------+----------+------+-------------+
|   4    |    1     |   1  |      1      | } Order '2' is connected to only one supplier_id
+--------+----------+------+-------------+

(はるかに多くのサプライヤーに関連する顧客ごとの注文が多い場合、これはより複雑になります)。

私は私が近いと思った:

SELECT t1.user_id, count(DISTINCT t1.prod_id) AS prod_count
     , count(DISTINCT t1.order_id) as orders
     , IF(count(DISTINCT t3.supplier_id)>1,0,1) AS Unique_Orders
  FROM ProductSales AS t1
  LEFT JOIN `order` AS t2 ON t1.order_id=t2.order_id
  LEFT JOIN ProductSales AS t3 ON t2.order_id=t3.order_id
 WHERE t1.supplier_id=1
 GROUP BY t1.customer_id
HAVING t1.customer_id<>'NULL'

上記のorders表はProductSalesのみに関連していorder_idます。

これは私の顧客、製品(合計)、注文(合計)を示していますが、一意の注文は一意の注文があるか(0)またはないか(1)を示しています.IFステートメントのロジックを理解しており、期待どおりに動作します. 私を困惑させているユニークな注文の数を見つける方法を考えています。

テーブルは確立されており、変更できません。

助言がありますか?

4

1 に答える 1

2

一意の注文は次のように定義できます

SELECT OrderID
FROM yourtable
GROUP BY OrderID
Having COUNT(Distinct SupplierID) = 1

だから試してみてください

SELECT 
    customer_id AS customer, 
    count(*) AS prod_count.
    count(DISTINCT productsales.order_id) as orders,
    COUNT(distinct uqo)
FROM ProductSales  
    left join 
    (
        SELECT Order_ID uqo
        FROM Productsales
        GROUP BY Order_ID 
        Having COUNT(Distinct supplier_id) = 1 
    ) uniqueorders 
    on ProductSales.order_id = uniqueorders.uqo      
 WHERE supplier_id=1              
 GROUP BY customer_id
于 2012-08-17T11:23:50.223 に答える