我一直在用我有限的SQL知识绞尽脑汁,同时试图想出一个查询来对我的订单数据库运行统计数据。
表订单的布局如下:
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对我来说是一个相当新的手艺。任何帮助都将不胜感激!
发布于 2010-07-30 22:49:04
试试这个:
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
https://stackoverflow.com/questions/3375883
复制相似问题