首页 > 解决方案 > 对某些分组行求和

问题描述

我有一个数据集,显示了每个消费者类别(访问过一次、两次、3 次、4 次、5 次等的消费者)的客人数量和收入。

它看起来像这样: 在此处输入图像描述

我得到上面那个表的查询是:

SELECT number_of_trans, COUNT(*) AS guest_count, SUM(amount) AS revenue FROM customer_counting GROUP BY number_of_trans ORDER BY number_of_trans

现在,我想将 guest_count 和收入相加,并且我想对以下类别求和:1、2、3、4、5-7 和 8+。

所以实际上 1、2、3 和 4 将保持不变,但我将在第 5-7 行和第 8 行及以后的行中求和。

我该怎么做?我想要的表格如下(不要担心值的准确性):

在此处输入图像描述

我希望我的问题被理解。

标签: sqlpresto

解决方案


使用case和子查询(或 CTE):

SELECT (CASE WHEN number_of_trans < 5 THEN CAST(number_of_trans as varchar)
             WHEN number_of_trans < 8 THEN '5-7'
             ELSE '8+'
        END) as grp,
       SUM(guest_count) as guest_count, SUM(revenue) as revenue
FROM (SELECT number_of_trans, COUNT(*) AS guest_count, SUM(amount) AS revenue
      FROM customer_counting
      GROUP BY number_of_trans
     ) x
GROUP BY grp
ORDER BY MIN(number_of_trans);

推荐阅读