sql - 对某些分组行求和
问题描述
我有一个数据集,显示了每个消费者类别(访问过一次、两次、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 行及以后的行中求和。
我该怎么做?我想要的表格如下(不要担心值的准确性):
我希望我的问题被理解。
解决方案
使用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);
推荐阅读
- node.js - Mongoose Schema 未定义
- c++ - 我想从向量中删除和元素并同时在 C++ 中遍历它,但我的代码显示运行时错误
- unity3d - 如何在运行时在图块上生成对象(树)?(Unity 2D Tilemap)
- angularjs - 您如何在 ngx-bootstrap 模态中使用 angularjs 升级组件?
- c++ - 在函数之间操作变量
- linux - linux-pcie 预分配 BAR 空间?
- python - Python seaborn - 删除标签边框
- swift - 如何将类型作为 func 参数传递?
- python - 有没有办法在不同的文件中引用类实例?
- javascript - 如何在服务器端渲染单个组件?