我试图将我的数据分成十分位数,但不是传统意义上的十分位数,因为维度是十分位数的基础。
我有 463 个独特的 it_scores,范围从 316-900(我的维度),总计 1,296,070 trade_counts(我的度量)。使用以下代码将我的数据分为 10 个桶,其中包含 47 个唯一的 it_scores:
ntile(10) over (order by it_score)) as tileno
虽然这绝对是在做它应该做的事情,但我需要在总 trade_counts 的基础上构建我的存储桶,每个存储桶包含大约 129.6k 个观察值。 it_score 仍然是维度,但范围不一定相等,即十分位数 10 的范围可能为 316-688,有 129.6k 个观测值,而十分位数 9 的范围可能为 689-712,也有 129.6k 个观测值。
我该如何实现这一目标?
您可以使用窗口函数根据累积值分配十分位
trade_counts
。
SELECT
decile,
SUM(trade_count) AS decile_trade_count
FROM
(
SELECT
it_score,
trade_count,
FLOOR(
(SUM(trade_count) OVER (ORDER BY it_score) - 1) / (SUM(trade_count) OVER ()) * 10
) + 1 AS decile
FROM table
) sub
GROUP BY decile
ORDER BY decile;