使用SQL查找超过X订单的客户总数

时间:2010-07-30 22:41:30

标签: sql mysql

我在尝试提出查询以在我的订单数据库上运行统计数据时,一直用我有限的SQL知识来烘焙我的大脑。

表ORDERS的布局如下:

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

每次购买都记录有客户ID和产品ID - 同一客户可以有多条记录,甚至可以存储具有相同客户和产品的多条记录。

我需要提出一个查询,可以返回购买X和X不同产品的客户数量 - 例如,3个客户购买少于5种不同的产品,10个购买5-10种不同的产品,1个购买超过10种不同的产品。

我很确定这与派生表有关,但高级SQL对我来说是一个相当新的工具。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

试试这个:

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