按照另一列中给出的四分之一的SQL查询一列中的四分之一百分比

我有一个Sales_Table

month quarter sales 1 1 100 2 1 200 3 1 300 4 2 400 5 2 500 6 2 600 

我希望得到季度销售额百分比(季度专栏)

 month quarter sales Quarterly 1 1 100 17% 2 1 200 33% 3 1 300 50% 4 2 400 27% 5 2 500 33% 6 2 600 40% 

我用公式:
(基本每季度=(销售额* 100 /同一季度的销售总额)

这是我的查询:

 Select sales, month, quarter, sales * 100.0 / (select Sum(sales) from Sales_Table group by quarter) as quarterly from Sales_Table group by month; 

这给了我结果:

 sales month quarter quarterly 100 1 1 16.666666666666668 200 2 1 33.333333333333336 300 3 1 50 400 4 2 66.66666666666667 500 5 2 83.33333333333333 600 6 2 100 

这个结果显示第一季度正确的季度价值,但第二季度 不正确

请帮助我正确的季度2季度列值。

我会使用子查询来执行from子句中的季度计算:

 Select st.sales, st.month, st.quarter, (st.sales * 100.0 / q.sales) as quarterly from Sales_Table st join (select quarter, sum(sales) as sales from Sales_Table group by quarter ) q on st.quarter = q.quarter; 

如果你想以百分比格式化这个,你可以使用:

 concat(format(st.sales * 100.0 / q.sales, 2), '%') 

http://sqlfiddle.com/#!9/454ba/6

 SELECT s.sales, s.month, s.quarter, (s.sales * 100 / (q.q_sales)) as quarterly FROM Sales_Table s LEFT JOIN ( SELECT quarter, SUM(sales) as q_sales FROM Sales_Table GROUP BY quarter) as q ON q.quarter = s.quarter 

您的查询以最less的编辑:

  Select sales, month, quarter, sales * 100.0 / (select Sum(sales) from Sales_Table s WHERE s.quarter=m.quarter) as quarterly from Sales_Table m 

这是一个非标量的子查询。 我怀疑MySQL正在随机使用其中的一个值,就像当您引用一个没有聚合函数的非group-by列一样。 那就是为什么一个是对的,另一个不是。 (如果你检查math,你会发现600是所有计算中的除数。)我认为你可以通过关联quarter来修正你的查询。

 select sales, month, quarter, sales * 100.0 / ( select sum(sales) from Sales_Table st2 where st2.quarter = st.quarter group by quarter ) as quarterly from Sales_Table st 

其实你也做了我提到的整个非汇总列的东西,当你按月分组,然后在你的输出包括salesquarter 。 在这种情况下,你不需要这个组,因为你所有的行都在他们自己的组中。 但是MySQL允许你在其他平台给你一个错误的地方运行这个查询。