对于每一行,列出销售总额以及销售更多的人的平均数

问题描述 投票:1回答:2

我试图回答这个问题:“对于每个销售人员,列出他/她的销售额以及销售额超过他/她的销售员的平均销售额。

select sum(p.price * d.qty)
from salesman s 
join invoices i on (i.salesman = s.salesman)
join detail d on (d.ino = i.ino)
join parts p on (p.pno = d.pno)
where ---------(
  select sum(p.price * d.qty)
  from salesman s 
  join invoices i on (i.salesman = s.salesman)
  join detail d on (d.ino = i.ino)
  join parts p on (p.pno = d.pno)
)
group by s.salesman
order by s.salesman

我不知道如何将所有其他销售额与我从当前行中获得的销售额进行比较,并为每个销售人员重复这一点

销售员通过一些表格链接以达到零件的成本和销售数量

谢谢您的帮助

sql oracle
2个回答
1
投票

您从每个销售人员的销售开始:

select i.salesman, sum(p.price * d.qty)
from invoices i join
     detail d
     on d.ino = i.ino join
     parts p
     on p.pno = d.pno
 group by i.salesmane;

然后,您可以使用窗口函数获得平均值:

select i.salesman,
       sum(p.price * d.qty),
       avg(sum(p.price * d.qty)) over (order by sum(p.price * d.qty) rows between 1 following and unbounded following)
from invoices i join
     detail d
     on d.ino = i.ino join
     parts p
     on p.pno = d.pno
group by i.salesmane;

0
投票

尝试创建一个临时表#TempSales与每个销售人员的总销售额#将在tempdb数据库中创建一个临时表,并在用户会话关闭时删除,如果你不自行删除它,你可以在下面运行整个查询一笔交易。

{select s.salesman,sum(p.price * d.qty)将TotalSales作为#TempSales从salesman的连接发票i on(i.salesman = s.salesman)加入详细信息d(d.ino = i.ino)通过s.saleman连接部件p(p.pno = d.pno)组

select s.Salesman,TotalSales,(select avg(TotalSales) from #TempSales t where t.salesman <> s.salesman and t.TotalSales > s.TotalSales) as AverageSales
from #TempSales
order by s.salesman
drop table #TempSales

}

© www.soinside.com 2019 - 2024. All rights reserved.