已经为GROUPED BY的列的SUM

时间:2014-05-20 21:47:54

标签: mysql sql

我使用以下查询:

SELECT mgap_growth 
FROM mgap_orders 
WHERE account_manager_id = '159795' 
GROUP BY mgap_ska_report_category

mgap_growth是一个具有相同金额的列,仅根据mgap_ska_report_category而不同,这是分组的原因。现在我已经规范了每个类别的个别金额,我如何使用SUM计算他们的总数?

以下是数据的屏幕截图:

enter image description here

我只需要每个类别的增长量的总和,而不是所有mgap_growth记录的增量,但我不确定分组后如何进行SUM。

谢谢!

编辑其他查询:

让我再提出另一个问题:我们知道每个类别只需要一次SUM,但如果我需要GROUP BY CUSTOMER怎么办?我刚刚发现数据中有多个客户,每个客户每个增长记录都有重复,但因类别而异。我真的需要使用两个分组,一个用于分类,单个输出和增长量,然后另一个用于客户。

这是描述数据的图像:

enter image description here

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要对子查询中的结果求和。

SELECT SUM(mgap_growth) AS total_mgap_growth
FROM (SELECT mgap_growth 
      from mgap_orders 
      WHERE account_manager_id = '159795' 
      GROUP BY mgap_ska_report_category) AS x

答案 1 :(得分:0)

这应该显示该特定客户经理的每个类别的总增长:

SELECT sum(mgap_growth) AS Growth, mgap_ska_report_category as Category 
FROM mgap_orders
WHERE account_manager_id = '159795' 
GROUP BY mgap_ska_report_category

不是考虑在分组之后进行SUM ,而是可以在一个语句中一起完成这两个。你已经拥有了99%的成就。


要在评论中回答您的其他问题,您可以添加另一列进行分组。您在逐组中列出它们的顺序是重要的部分。总体分组排在第一位。因此,假设“客户”是客户列名称,您可以这样做:

SELECT mgap_ska_report_category as Category, Customer, sum(mgap_growth) AS Growth
FROM mgap_orders
WHERE account_manager_id = '159795' 
GROUP BY mgap_ska_report_category, customer
WITH ROLLUP

请注意,更改顶行中的SELECT列只是为了美观,您可以按任意顺序放置它们并获得相同的数据,但这将是最容易阅读的。

这显示了该特定客户经理按类别划分的每位客户的增长情况。


再次编辑以添加WITH ROLLUP。这将为您提供每个类别的总计。尝试使用WITH ROLLUP和不使用WITH ROLLUP来查看它是如何改变的。