2014-05-20 77 views
-1

我使用以下查询:SUM已经GROUPED BY

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分组。

谢谢!

编辑其他查询:

让我扔的另一个问题进入组合:我们知道自己需要每个类别只有一次和,但如果我需要什么GROUP BY客户?我发现数据中有多个客户,每个客户都是按照增长记录重复的,但是按类别不同。我真的需要使用两个分组,一个分类来挑选并累计增长量,然后是另一个单独的客户。

这里是描述数据的图像:

enter image description here

回答

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 
+0

我想你可能会误读?我认为OP需要每个分组类别的总和。如果OP想要一个总和,那么子查询中的group by就没有意义了。 – Andrew

+0

@Andrew。 。 。我认为巴尔玛正确地理解了这个问题。 –

+0

@Barmar - 这样做 - 谢谢 - 如果我想添加一个额外的列到查询,我会添加它?当我尝试添加另一列到第二个SELECT时,我得到一个未定义的索引,如下所示:FROM(SELECT mgap_growth,名称来自mgap_orders ...我不需要SUM额外的列,它只是用于标记的目的 – DataGuy

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%的比例。


要在评论中回答您的其他问题,您可以添加另一列给group by。您在小组中列出的顺序是重要的部分。整体分组是第一位的。因此,假如“客户”是客户的列名,你这样做:

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 

注意,在顶线改变选择列只是为了美观,你可以把它们以任意顺序,将获得相同的数据,但这将是最容易阅读的。

这显示了每个客户按类别为该特定客户经理的增长。


再次编辑添加WITH ROLLUP。这也会给你每个类别的总数。尝试使用和不使用WITH ROLLUP来查看它如何改变事物。

+0

这是有道理的..我把另一个问题引入混合:我们知道每个类别只需要SUM一次,但如果我需要GROUP BY CUSTOMER,我该怎么办?我发现数据中有多个客户,每个客户都按照增长记录重复,但是按类别不同。需要使用两个分组,其中一个用于分类选出并累计增长量,然后是另一个单独输出客户。我在上面的代码中添加了一个图像,以便更好地解释。 – DataGuy

+0

我编辑了我的答案以包含附加内容题。您还可以在原始解决方案中添加附加的where子句以限制客户。 WHERE account_manager_id ='159795'和Customer ='X' – Geoff

+0

如果这回答您的问题,请您将其标记为已接受的答案。 – Geoff