2012-11-13 24 views
0

我寻找以下输出计数多个属性的sql

  • 10的客户10项2个的产品组
  • 8客户买了在1个产品组买了10项。

一般情况下,客户数量超过购买物品的矩阵AND产品组,即。计数超过2属性(项目和产品组)

我尝试下面的代码,但后来只给了我

  • 1客户提供10个项目和2个产品组
  • 1的客户有10项和1个产品组尽管有更多的客户在每一行:

片断,

count (distinct customer_id) over (Partition by customer_id) as Customer_ID 
,count (distinct customer_shipment_item_id) Over (Partition by customer_id) as customer_items 
,count (distinct product_group) Over (Partition by customer_id) as customer_product_groups 

你能解释这将如何工作?

+4

如果你提供架构和数据例如,SQL小提琴可能是 –

+0

嗨罗马会更容易些,我可以在这里添加一个表格?格式中断每次我尝试添加一些Excel示例。谢谢比安卡 – user1820913

回答

0

试试这个。除非我不明白你在找什么,否则你不需要Partition By子句。

count (distinct customer_id) as Customer_ID 
,count (distinct customer_shipment_item_id) as customer_items 
,count (distinct product_group) as customer_product_groups 
+0

嗨汤姆,谢谢,但这没有奏效。它产生了一行x顾客,y项目,z产品组。我正在寻找一个矩阵,由客户计算:x客户结合y1产品,z1产品组,x客户结合y2产品,z2产品组等。有任何想法吗? Bianca – user1820913

0

我觉得这样的事情会给你你在找什么:

SELECT COUNT(customer_id) Customer_ID, customer_items, customer_product_groups 

FROM 

(SELECT customer_id, COUNT(DISTINCT customer_shipment_item_id) as customer_items, 
      COUNT(DISTINCT product_group) as customer_product_groups 
FROM  TABLENAME 
      JOIN <YOUR JOINS> 
WHERE customer_id IN (SELECT customer_ID FROM <YOUR JOINS> WHERE customer_shipment_item_id = x) 
GROUP BY customer_id 
) a 

GROUP BY customer_items, customer_product_groups 
+0

嗨汤姆谢谢你,其实它现在可以工作,但因为这只是问题的一部分,所以总的结果仍然不起作用(我的错,只是意识到):实际上完全问题是,顾客怎么看起来像顾客购买的地方一个或多个符合特定标准的项目。因此我将查询限制在这个标准(customer_shipment_item_id = x)。现在,我只得到客户的一部分,即标准属于该项目的部分,而不是他/她总体看起来如何(只有一个项目可能符合标准)。这有意义吗? – user1820913

+0

我刚刚更新了将代码添加到子查询中的WHERE子句。这会给你具有你正在寻找的customer_shipment_item_id的客户完全相同的结果。 – Tom

+0

这个工作适合你吗? – Tom