Reputation: 9639
I have the following tables:
ORDER
OrderId
-------
Order1
Order2
Order3
CUSTOMERORDER
OrderId CustomerId
------- ----------
Order1 Cust1
Order1 Cust2
Order2 Cust3
Order3 Cust1
The query
select distinct count(*) as CustomersPerOrder
from CustomerOrder
group by CustomerOrder.OrderId
order by CustomersPerOrder
returns
CustomersPerOrder
-----------------
1
2
That is, some orders have 1 customer, some have 2. I also want to know how many orders have 1 customer, and how many have 2:
CustomersPerOrder OrdersCount
----------------- -----------
1 2
2 1
That is, 2 orders (OrdersCount) have 1 customer (CustomersPerOrder), and 1 order (OrdersCount) has 2 customers (CustomersPerOrder).
Upvotes: 1
Views: 61
Reputation: 4103
put away the distinct and count the occurences of and group the 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
Upvotes: 2
Reputation: 110071
SELECT CustomersPerOrder, COUNT(*)
FROM
(
SELECT COUNT(*) as CustomersPerOrder
from CustomerOrder
group by CustomerOrder.OrderId
) sub
GROUP BY CustomersPerOrder
Upvotes: 2