2013-07-10 4 views
0

Допустим, у меня есть таблица, которая имеет следующие столбцы:SQL - Группировка запросов

CUSTOMERID, PRODUCTID

То, что я хочу видеть, если у меня есть 100000 клиентов, которые я хочу, чтобы сгруппировать их таким образом я могу см. X количество клиентов имеет Y количество продуктов. Например, у 2 000 клиентов может быть 5 покупок, у 1000 клиентов есть 4 продукта, у 10 клиентов может быть 25 продуктов и т. Д. Как мне группироваться на основе количества клиентов с X-номером продуктов?

База данных - это Oracle.

Пример Набор данных:

customerID productId 
---------- ---------- 
12345  33035 
12345  33049 
12345  33054 
56789  32777 
56789  32897 
56789  32928 
56789  32958 
56789  33174 
56789  33175 
56789  33410 
56789  35101 
67890  32777 
67890  32897 
67890  32928 
67890  32958 
67890  33174 
67890  33175 
67890  33410 
67890  35101 
    45678  33035 
    45678  33289 
    45678  34354 
    45678  36094 
23456  32778 
23456  33047 
23456  33051 
34567  32776 
34567  32778 
34567  33162 

В результате этой группировки (например, на основе набора данных), где есть 3 клиентов с 3 продуктов, 2 клиентов с 8 позиций и 1 клиент с 4 продуктов.

number_customers number_products 
3   3 
2   8 
1   4 

Я пробовал кучу группы по заявлениям, но я чего-то не хватает. Любая помощь будет принята с благодарностью.

Благодаря

+0

Можете ли вы показать некоторые данные? И какие СУБД вы используете? –

ответ

2
SELECT 
    COUNT(CustomerID) AS number_customers, 
    number_products 
FROM (
    SELECT CustomerID, 
    COUNT(ProductID) AS number_products 
    FROM tableName 
    GROUP BY customerID 
) subquery 
GROUP BY number_products 
+0

Необходим ли «подзапрос« AS? С его включением запрос имеет ошибку, но когда я удаляю эту часть, он отлично работает. Благодаря! – ssbsts

0
Select CustomerID, count(ProductID) 
FROM tableName 
group by customerID 
having count(ProductID) > 25 

теперь, если вы хотите рассчитывать только отдельные продукты ...

Select CustomerID, count(distinct ProductID) 
    FROM tableName 
    group by customerID 
    having count(ProductID) > 25 

Если предположить, что данные содержит клиенту 1 Добавленно каждый раз для каждого продукта, и что несколько клиентов могут быть привязаны к тот же продукт.

+0

Извините, если мой вопрос был не совсем ясен. Это то, что я пробовал, но, к сожалению, только меня отвлекает. Благодаря этому я получаю количество продуктов для каждого клиента. Но я действительно хочу объединить эти числа вместе, чтобы я мог видеть, что есть 1500 клиентов, у которых есть 5 продуктов, например, а не только у этого клиента есть 5 продуктов. – ssbsts

0
create table cust_pur as select floor(dbms_random.value(1,21)) customer_id,   floor(dbms_random.value(1,21)) product_id from dual connect by level <= 100 order by customer_id 

select * from cust_pur order by customer_id 


with k1 as (
select distinct(customer_id), count(product_id) over (partition by customer_id) cnt from cust_pur order by customer_id 
) 
select count(customer_id),cnt from k1 group by cnt 
Смежные вопросы