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

标签 sql mysql

在尝试提出一个查询来对我的订单数据库运行统计数据时,我一直在用有限的 SQL 知识绞尽脑汁。

表 ORDERS 的布局如下:

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

每次购买都会记录客户 ID 和产品 ID - 同一客户可以有多个记录,甚至同一客户和产品可以有多个记录。

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

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

最佳答案

试试这个:

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    

关于sql - 使用 SQL 查找订单数量超过 X 的客户总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3375883/

相关文章:

sql - 脚本备份网站及其数据库

sql - 如何使用MS SQL 2008获取数据库中的表列表?

sql - 按定义的条件从表中选择列的次数

java - 为什么在这里找不到适合 mysql 消息的驱动程序?

sql - 如何编写漂亮的查询

sql - 在 Postgresql 中替代 join 语句

Php mysqli 选择位置和顺序

Mysql Group加入优化问题

MySQL "UPDATE"不工作?

php - 从Mysql数据库获取信息