【问题标题】:for each line, list the sum of sales together with the average of thoses who sold more对于每一行,列出销售额的总和以及销售额更高的那些人的平均值
【发布时间】:2019-03-09 15:12:19
【问题描述】:

我正在尝试回答这个问题: "对于每个推销员,列出他/她的销售额以及那些销售额超过他/她的推销员的平均销售额。

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


    【解决方案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;
    

    【讨论】:

    • 我不知道关键字“over”和“rows between 1 following and unbounded following”
    • @TommyRoy 。 . .这些就是 Oracle 所说的分析函数。您可以在文档中查找它们。
    【解决方案2】:

    尝试创建一个临时表#TempSales,其中包含每个销售员的总销售额 # 将在 tempdb 数据库中创建一个临时表,如果您不自己删除它,则会在用户会话关闭时删除它 您可以在一个事务中运行下面的整个查询。

    { 选择 s.salesman,sum(p.price * d.qty) 作为 TotalSales 进入#TempSales 来自推销员 加入发票 i on (i.salesman = s.salesman) 加入细节 d on (d.ino = i.ino) 加入零件 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
    

    }

    【讨论】:

    • 我知道你要去哪里,看起来更容易理解
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多