興味深い質問があります。基本的に、それはある年から次の年への支出の五分位数の移行に関するものです。これを解決するには、3 年間のすべての五分位数を調べて、人々がどこに移動するかを確認します。
これは、年別および電子メール別のデータの要約から始まります。キー機能はntile()
. 正直なところ、私は頻繁にrow_number()
andを使って自分で計算を行いますcount()
。そのため、それらは CTE に含まれています (ただし、その後は使用されません)。
with YearSummary as (
select year(OrderDate) as yr, o.BillEmail, SUM(o.total) as TotalSpent,
count(o.OrderID) as TotalOrders,
row_number() over (partition by year(OrderDate) order by sum(o.Total) desc) as seqnum,
count(*) over (partition by year(OrderDate)) as NumInYear,
ntile(5) over (partition by year(OrderDate) order by sum(o.Total) desc) as Quintile
from dbo.tblOrder o with (nolock)
where o.DomainProjectID=13 and o.BillEmail not like ''
group by o.BillEmail, year(OrderDate)
)
select q2010, q2011, q2012,
count(*) as NumEmails,
min(BillEmail), max(BillEmail)
from (select BillEmail,
max(case when yr = 2010 then Quintile end) as q2010,
max(case when yr = 2011 then Quintile end) as q2011,
max(case when yr = 2012 then Quintile end) as q2012
from YearSummary
group by BillEmail
) ys
group by q2010, q2011, q2012
order by 1, 2, 3;
最後のステップは、各電子メールの複数の行を取得し、それらをカウントに結合することです。一部の電子メールは特定の年に支出がないため、対応Quintile
するものは NULL になることに注意してください (これは実際には 125 行 - 5*5*5 ではなく、180 行 - 5*6*6 のようになります)
また、最終結果 (min()
およびmax()
) にサンプル メールを含めて、各グループのサンプルを確認できるようにします。
注: 保持率については、(1, 1, 1) -- すべての年の上位タイル -- と 2010 年の上位 5 分位の合計との比率を計算します。