для каждой строки перечислите сумму продаж вместе со средним числом тех, кто продал больше - PullRequest
1 голос
/ 09 марта 2019

я пытаюсь ответить на этот вопрос: «Для каждого продавца перечислите его / ее продажи вместе со средними продажами для тех продавцов, которые продали больше, чем он / она».

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

Я не знаю, как сравнивать все остальные продажи с продажами из текущей строки, и повторять это для каждого продавца

продавец связан несколькими таблицами для определения стоимости и количества проданных деталей

спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Вы начинаете с продаж для каждого продавца:

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 голосов
/ 09 марта 2019

попробуйте создать временную таблицу #TempSales с общим объемом продаж для каждого продавца, # создаст временную таблицу в базе данных tempdb и будет удалена, когда пользовательский сеанс закрыт, если вы не удалите ее самостоятельно, вы можете запустить всюзапрос ниже в одной транзакции.

{выберите s.salesman, сумму (p.price * d.qty) в качестве TotalSales в #TempSales из накладных присоединения продавца i при присоединении (i.salesman = s.salesman)подробные сведения о (d.ino = i.ino) объединении частей группы p (p.pno = d.pno) с помощью s.saleman

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...