希望使用NTILE来查看按林地面积占国土总面积百分比的国家分布情况。我想使用的列中的数值范围是从0.00053到非常接近98.25,而且各国在该范围所暗示的四分位数中分布不均,即0至25、25至50、50至75和75至100。相反,NTILE只是将表分成四组,行数相同。如何使用NTILE根据值分配分位数?
SELECT country, forest, pcnt_forest,
NTILE(4) OVER(ORDER BY pcnt_forest) AS quartile
FROM percent_forest发布于 2020-05-21 12:15:13
您可以使用case表达式:
select pf.*,
(case when pcnt_forest < 0.25 then 1
when pcnt_forest < 0.50 then 2
when pcnt_forest < 0.75 then 3
else 4
end) as bin
from percent_forest pf;或者,更简单地说,使用算术:
select pf.*,
floor(pcnt_forest * 4) + 1 bin
from percent_forest pf;我不会用“四分位数”这个词来形容这个专栏。一个四分位数意味着四个大小相等的垃圾箱(或至少尽可能接近给定的重复值)。
发布于 2020-05-21 07:08:50
WIDTH_BUCKET函数在理想情况下与此场景匹配:
桶(甲骨文)允许您构造等宽直方图,其中直方图范围被划分为具有相同大小的间隔。(将此函数与NTILE进行比较,NTILE创建等高直方图。)
它支持甲骨文,雪花,PostgreSQL,蜂巢,.
你的代码:
SELECT country, pcnt_forest
,WIDTH_BUCKET(pcnt_forest, 0, 1, 4) AS w
,NTILE(4) OVER(ORDER BY pcnt_forest) AS ntile -- for comparison
FROM percent_forest
ORDER BY w输出:
+----------+--------------+----+-------+
| COUNTRY | PCNT_FOREST | W | NTILE |
+----------+--------------+----+-------+
| A | .05 | 1 | 1 |
| B | .06 | 1 | 1 |
| C | .07 | 1 | 2 |
| E | .49 | 2 | 2 |
| D | .51 | 3 | 3 |
| F | .96 | 4 | 3 |
| G | .97 | 4 | 4 |
| H | .98 | 4 | 4 |
+----------+--------------+----+-------+https://stackoverflow.com/questions/61929032
复制相似问题