2014-01-06 45 views
1

我有以下表中返回計:對於每個不同的

ORDER 

OrderId 
------- 
Order1 
Order2 
Order3 

CUSTOMERORDER 

OrderId CustomerId 
------- ---------- 
Order1 Cust1 
Order1 Cust2 
Order2 Cust3 
Order3 Cust1 

查詢

select distinct count(*) as CustomersPerOrder 
from CustomerOrder 
group by CustomerOrder.OrderId 
order by CustomersPerOrder 

回報

CustomersPerOrder 
----------------- 
1 
2 

也就是說,有些訂單有1個客戶,有的有2我也想知道有多少訂單有1個客戶,有多少個有2個:

CustomersPerOrder OrdersCount 
----------------- ----------- 
1     2 
2     1 

也就是說,2個訂單(OrdersCount)有1個客戶(CustomersPerOrder),1個訂單(OrdersCount)有2個客戶(CustomersPerOrder)。

回答

2
SELECT CustomersPerOrder, COUNT(*) 
FROM 
(
SELECT COUNT(*) as CustomersPerOrder 
from CustomerOrder 
group by CustomerOrder.OrderId 
) sub 
GROUP BY CustomersPerOrder 
+0

有些人可能會反對子查詢,但成本不是來自DISTINCT不同。 –

+0

謝謝,我一直在爲此奮鬥一段時間!不擔心成本。 – Polyfun

2

收起了獨特和計數的出現次數和組CustomersPerOrder

with counter as (
select count(customerid) as CustomersPerOrder 
from CustomerOrder 
group by CustomerOrder.OrderId 
) 
select CustomersPerOrder, COUNT(*) as OrdersCount 
from counter 
group by CustomersPerOrder