根据范围汇总列值

时间:2020-05-29 11:30:21

标签: sql postgresql count aggregate

我是SQL和stackoverflow的新手,请原谅我的问题不重要。我在表中记录了客户购买数量,因此我希望统计购买数量在一定范围内的客户。

TABLE:
+-------------+----------------+
| customer_id | order_quantity |
+-------------+----------------+
|         123 |          10000 |
|         143 |           5000 |
|         999 |         200000 |
|         555 |          50000 |
+-------------+----------------+

目标是计算有多少客户购买<5000,订单数量在5000-50000和50000-100000之间。

我用过:

SELECT customer_id,
      CASE
         WHEN COUNT(order_quantity) < 5000
         ....
FROM purchases

这是不正确的(甚至不起作用)。

1 个答案:

答案 0 :(得分:1)

您可以使用:

select (case when order_quantity < 5000 then '[0-5000)'
             when order_quantity < 10000 then '[5000-10000)'
             else '10000+'
        end) as grp,
       count(*) as num_purchases,
       count(distinct customer_id) as num_customers
from t
group by grp
order by min(order_quantity);

如果某个客户在给定的组中进行了多次购买,则不清楚是否要计算购买次数或客户数量。两者都做。