首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对某些分组行的求和

对某些分组行的求和
EN

Stack Overflow用户
提问于 2018-08-28 18:27:14
回答 2查看 37关注 0票数 1

我有一个数据集,它显示了每一类消费者的客人数量和收入(已访问过一次、两次、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行开始的行中求和。

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

我希望我的问题能被理解。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-28 21:44:37

戈登建议的更简单的形式:

代码语言:javascript
复制
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 freq_band, 
  COUNT(*) AS guest_count, 
  SUM(amount) AS revenue 
FROM customer_counting 
GROUP BY CASE WHEN number_of_trans < 5 THEN cast(number_of_trans as varchar)
    WHEN number_of_trans < 8 THEN '5-7'
    ELSE '8+' 
  END
ORDER BY freq_band
票数 0
EN

Stack Overflow用户

发布于 2018-08-28 18:31:41

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

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52064211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档