首页 > 解决方案 > 如何对 BigQuery 中的不同值进行 NTILE?

问题描述

我有一个查询,我试图在 Google BigQuery 中汇总每个客户的销售额。我遇到的问题是,如果一个十分位数在许多客户具有相同销售价值的点上中断,那么尽管销售额相同,他们最终可能会以不同的十分位数结束。

例如,如果总共有 20 位客户,其中一位花费了 100 美元,18 位花费了 50 美元,还有一位花费了 25 美元,则由于创建了相同的组,花费 50 美元的 18 位客户仍将在所有十分位中细分,而实际上我希望它们被放在同一个十分位数中。

我使用的数据显然有点复杂——大约有 1000 万客户,销售额在每个客户所属的特定组内进行等分。

示例代码:

NTILE(10) OVER (PARTITION BY customer_group ORDER BY yearly_sales asc)  as current_sales_decile

NTILE 函数有效,但我只是遇到了上述问题,还没有弄清楚如何解决它。欢迎任何建议。

标签: sqlgoogle-bigquery

解决方案


自己计算 ntile:

select ceiling(rank() over (partition by customer_group order by yearly_sales) * 10.0 /
               count(*) over (partition by customer_group)
              )

这使您可以更好地控制瓷砖的形成方式。特别是,具有相同值的所有行都位于同一个图块中。


推荐阅读