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