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  |
+--------+----------+------+

我一直试图实现但一无所获的是在我的结果中添加第四列,以显示每个客户仅属于当前供应商的 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 回答