我正在尝试下面的代码,它根据交易的最近性、频率和货币价值来分析和评分客户。
select customer_id, rfm_recency, rfm_frequency, rfm_monetary
from
(
select customer_id,
ntile(4) over (order by last_order_date) as rfm_recency,
ntile(4) over (order by count_order) as rfm_frequency,
ntile(4) over (order by sum_amount) as rfm_monetary
from
(
select customer_id,
max(local_date) as last_order_date,
count(*) as count_order,
sum(amount) as sum_amount
from transaction
group by customer_id) as T
) as P
然而 ntile
在mysql版本(v5)中不可用,因为它显然是一个“窗口函数”,只在v8+上工作。
我找不到替代这个功能的工作方法。我对sql非常陌生,所以我自己也很难弄清楚。
有没有 ntile
我能用的替代品?如果我删除 ntile
段。
2条答案
按热度按时间2admgd591#
如果你需要MySQL8.0的特性,你真的应该升级到MySQL8.0。它们一定会更容易、更优化。
我找到了一种方法来模拟文档中显示的ntile查询:
这里有一个解决方案:
2和4因子分别用于第(2)个和第(4)个变量。9的值是因为这个示例表中有9行。在运行此查询之前,必须知道表的计数。这个解决方案还需要用户定义的变量,这总是有点棘手。
结果:
我将把它作为一个练习留给您,让您根据查询和表调整此技术,或者决定是时候升级到mysql 8.0了。
n3schb8v2#
您可以枚举行并使用算术。不幸的是,您需要这样做三次: