Использование SQL для определения общего числа клиентов с более чем X заказов - PullRequest
1 голос
/ 31 июля 2010

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

Таблица ORDERS выложена так:

CustomerID ProductID (etc)
1              10
1              10
1              11
2              10
4              9

Каждая покупка записывается с идентификатором клиента и идентификатором продукта - МОЖЕТ быть несколько записей для одного и того же клиента и даже несколько записей для одного и того же клиента и продукта.

Мне нужно задать запрос, который может вернуть количество клиентов, которые купили между X и X разными товарами - например, 3 покупателя купили менее 5 разных товаров, 10 купили 5-10 разных товаров, 1 купили более 10 разных продуктов.

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

1 Ответ

3 голосов
/ 31 июля 2010

Попробуйте:

SELECT T1.products_bought, COUNT(T2.cnt) AS total
FROM (
    SELECT '<5' AS products_bought, 0 AS a, 4 AS b
    UNION ALL
    SELECT '5-10', 5, 10
    UNION ALL
    SELECT '>10', 11, 999999
) T1
LEFT JOIN
(
    SELECT COUNT(DISTINCT ProductID) AS cnt
    FROM ORDERS
    GROUP BY CustomerID
) T2
ON T2.cnt BETWEEN T1.a AND T1.b
GROUP BY a, b

Результат:

products_bought  total
<5               3    
5-10             0    
>10              0    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...