MySQL - 基于SUM将GROUPING分类到范围

时间:2013-06-26 22:12:20

标签: mysql group-by sum segments

提前感谢您查看我的问题。我想要的是获取用户交易历史记录并将所有总订单的收入相加,然后将这些总订单分组为细分,并计算每个细分受众群的数量。

我基本上使用单个表来汇总收入数据。所有意图和目的的 REVENUE 表都是这样构建的。

列|样本数据
ID | 123
ORDER_NUMBER | 123ABC
收入| 10

每条记录都是这样的结构,每次购买都有一条记录。我使用以下SQL按ID

汇总收入
SELECT ID, SUM(ROUND(REVENUE)) as Total_Rev
FROM REVENUE
GROUP BY ID
ORDER BY ID

我得到这样的输出
ID | Total_Rev
1002436 | 11个
1002437 | 12个
1002438 | 5
10024399 | 2
100244 | 4
10024544 | 21个
10024584 | 16个
10024624 | 4
1002478 | 8
10024789 | 12个
10024843 | 4
10024944 | 9个

所以我要做的是将 ID Total_rev 分组到3个预定义的细分中,然后我想计算每个细分中的用户ID。

我的细分受到 Total_Rev 的定义,如下所示:
低:1-5
Med:6-20
高:21岁以上

我只是不确定如何创建适当的SQL来执行此分段练习。再次感谢您看一下,我很乐意提供更多详细信息或回复有关此问题的任何反馈。

谢谢, -Chris

1 个答案:

答案 0 :(得分:0)

试试这样:

SELECT ID, LMH FROM (
    SELECT ID, SUM(ROUND(REVENUE)) as Total_Rev, 'LOW' as LMH
       FROM REVENUE
       GROUP BY ID
       HAVING Total_Rev > 0 AND Total_Rev <= 5
    UNION ALL
    SELECT ID, SUM(ROUND(REVENUE)) as Total_Rev, 'Med' as LMH
       FROM REVENUE
       GROUP BY ID
       HAVING Total_Rev > 5 AND Total_Rev <= 20
    UNION ALL
    SELECT ID, SUM(ROUND(REVENUE)) as Total_Rev, 'High' as LMH
       FROM REVENUE
       GROUP BY ID
       HAVING Total_Rev > 20) as subquery
    ORDER BY ID

我认为可以有更优雅的方式来做同样的事情,但我的陈述也应该起作用=)