在SQL中计算销售利润的百分比

时间:2019-07-20 01:11:23

标签: sql

Product Group   Product ID         Sales      Profit
    A             6797              1,000      200 
    A             6745                500       90 
    B             1278                200       60 
    B             1245              1,500      350 
    C             7890                650       80 
    D             4587                350       50 

Q1)。过滤掉产品ID占其各自总利润前80%的产品。

2 个答案:

答案 0 :(得分:0)

不确定使用的是什么rdbms可以通过这种方式在SQL Server中获得输出。您可以为组获取利润,并使用合计函数比较和过滤行。

select 'A' as Product_group, 6797  as ProductID,  1000    as Sales ,  200   as Profit into #temp1 union all 
select 'A' as Product_group, 6745  as ProductID,      500  as Sales ,    90 as Profit union all 
select 'B' as Product_group, 1278  as ProductID,      200  as Sales ,    60 as Profit union all 
select 'B' as Product_group, 1245  as ProductID,  1500    as Sales ,  350   as Profit union all 
select 'C' as Product_group, 7890  as ProductID,      650  as Sales ,    80 as Profit union all 
select 'D' as Product_group, 4587  as ProductID,      350  as Sales ,    50 as Profit  


select t.Product_group, t.ProductID, sum(t.sales) totalsles, sum(t.profit) totalProfit, sum(Profit_grp) Groupprofit   from #temp1 t 
join  (select Product_group,  sum(sales) totalsles_group, sum(profit) Profit_grp from #temp1 t1 group by Product_group) t1 on t1.Product_group = t.Product_group 
group by t.Product_group, t.ProductID  
having sum(t.profit) *1.0/ sum(t1.Profit_grp) *1.0 >= 0.8

输出:我添加组利润只是为了比较。您可以删除聚合并根据需要添加分组

Product_group   ProductID   totalsles   totalProfit Groupprofit
B                   1245    1500            350      410
C                   7890    650             80       80
D                    4587   350             50       50

答案 1 :(得分:0)

我认为这可能会解决:

with CTE as(
select [Product Group], sum([Sales]) as Tolsum from Table 
group by [Product Group]

select prod.*,
sum(prod.[Profit]/cte.[Tolsum]) over (Partition by prod.[Product Group] Order by prod.[Product ID]) as contribution
from CTE cte
inner join
Table prod
on
cte.[Product Group] = prod.[Product Group]
having 
sum(prod.[Profit]/cte.[Tolsum]) over (Partition by prod.[Product Group] Order by prod.[Product ID]) < 0.8