MySQL-基于SUM对范围进行分组



提前感谢您查看我的问题。我想做的是获取用户交易历史记录,并将其所有总订单的收入相加,然后将这些总订单分组,并计算每个细分市场中有多少用户。

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

列|示例数据
ID | 123
订单编号| 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

因此,我要做的是通过Total_revID的分组为3个预定义的分段,然后我想计算每个分段中的用户ID。

我的分段由Total_Rev定义,如下所示:
低:1-5
Med:6-20
高:21+

我只是不知道如何创建合适的SQL来进行这个分段练习。再次感谢您的关注,我很乐意提供更多细节或回应有关此问题的任何反馈。

谢谢,-Chris

这样试试:

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

我认为还有更优雅的方法可以做到这一点,但我的声明也应该有效=)

相关内容

  • 没有找到相关文章

最新更新