作为一个例子,假设我们有表:
name | val
-----------
Alice| 1
Bob | 2
我可以通过
获得上述值的分位数SELECT *, NTILE(2) over (ORDER BY val ASC) AS quantile FROM table
给出:
name | val | quantile |
-----------|----------|
Alice| 1 | 1
Bob | 2 | 2
假设我现在有一张更大的桌子
name | val
-----------
Alice| 1
Bob | 2
Joe | 1.8
我想计算Joe 相对于前一个分位数的分位数。换句话说,我之前的分位数分为"< 1.5"和"> = 1.5",所以我应该看到:
name | val | quantile |
-----------|----------|
Alice| 1 | 1 |
Bob | 2 | 2 |
Joe | 1.8 | 2 |
是否有一种简单的方法可以使用 Impala 执行此操作,其方式是将NTILE(n)推广为任意n?理论上,我可以从先前的分位数找到每个分位数水平的最小值和最大值(假设为简单起来是连续的),但这非常繁琐。