Sql 对某些分组行求和
我有一个数据集,显示了每类消费者的客人数量和收入,这些消费者访问了一次、两次、3次、4次、5次等 看起来是这样的: 我要得到上面的表的查询是: 选择交易数量,计数*作为客人计数,金额作为收入 从客户处开始计算 按编号分组 按编号订购 现在,我要将客人数量和收入相加,并将它们相加为以下类别:1、2、3、4、5-7和8+ 所以实际上1,2,3,和4将保持不变,但我将在第5-7行和第8行及以后的行中求和 我该怎么做?我想要的表格如下,不要担心数值的准确性: 我希望我的问题被理解。用例和子查询或CTE:Sql 对某些分组行求和,sql,presto,Sql,Presto,我有一个数据集,显示了每类消费者的客人数量和收入,这些消费者访问了一次、两次、3次、4次、5次等 看起来是这样的: 我要得到上面的表的查询是: 选择交易数量,计数*作为客人计数,金额作为收入 从客户处开始计算 按编号分组 按编号订购 现在,我要将客人数量和收入相加,并将它们相加为以下类别:1、2、3、4、5-7和8+ 所以实际上1,2,3,和4将保持不变,但我将在第5-7行和第8行及以后的行中求和 我该怎么做?我想要的表格如下,不要担心数值的准确性: 我希望我的问题被理解。用例和子查询或C
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);
戈登提案的更简单形式:
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
8+?@javacash附近不应该有引号吗。谢谢。我想如果把这个问题放到内部组中,可以使问题变得更简单?