редактировать: PostgreSQLКак получить средние значения NTiles в SQL?
У меня есть куча цифр продаж для некоторых сотрудников ... таблица выглядит примерно так:
SalesRep # of sales/day NTILE(2)
-------- -------------- ----------
Johnny 1 1
Johnny 1 1
Johnny 4 1
Johnny 5 2
Johnny 5 2
Johnny 5 2
Sara 2 1
Sara 2 1
Sara 2 1
Sara 3 2
Sara 4 2
Sara 5 2
... ... ...
Я хотел бы найти средние # продаж каждого представитель делает за день на их 50% худшие исполнительские дни, а также их 50% из лучших конкурсных дней
Так, например, я хотел бы выходную таблицу выглядеть следующим образом:
SalesRep #ofSales Bottom50% #ofSales Top50%
-------- -------------- ----------
Johnny 2 5
Sara 2 4
... ... ...
До сих пор у меня есть:
select
salesrep,
case when ntile = 1 then avg(numsales) end,
case when ntile = 2 then avg(numsales) end,
...
...
case when ntile = 10 then avg(numsales) end
from (
select
salesrep,
numsales,
NTILE(10) over (PARTITION BY salesrep order by numsales asc) as ntile
from XXX
) as YYY
group by salesrep, ntile
Это дает мне странные ошибки, когда выход включает в себя кучу ... значения NULL смотрите таблицу ниже:
SalesRep #ofSales Bottom50% #ofSales Top50%
-------- -------------- ----------
Johnny NULL 5
Sara 2 NULL
... ... ...
MySQL, MS SQL? – Justin
Что такое tile2 или ntile? это ранжирование? или ярлык для процентиля? – Edper
@Justin: не может быть MySQL, потому что он по-прежнему не поддерживает функции окна. и не может быть SQL Server, поскольку он не имеет функции 'ntile()'. Наверное, это Oracle. –