sql - 如何对 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 函数有效,但我只是遇到了上述问题,还没有弄清楚如何解决它。欢迎任何建议。
解决方案
自己计算 ntile:
select ceiling(rank() over (partition by customer_group order by yearly_sales) * 10.0 /
count(*) over (partition by customer_group)
)
这使您可以更好地控制瓷砖的形成方式。特别是,具有相同值的所有行都位于同一个图块中。
推荐阅读
- c++ - 存储在向量中的对象,它们何时被销毁?
- excel - 通过 Visual C++ 自动化 Excel 时如何防止超时?
- node.js - AWS KCL 和处理错误
- dart - 为什么制表符缩进在 VSCode 中不一致?(飞镖语言)
- php - 提取 youtube 缩略图后更新 wordpress 自定义字段
- java - C#连接,但java没有连接
- javascript - 在NodeJS中输出一个JSON,文件名问题
- discord.js - 如何按名称查找角色并向其添加用户(discord.js)
- java - 对于任何域,Java SSL 握手总是得到“PKIX 路径构建失败”
- php - 如何使用php将数组的值设置为输入字段