首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用列值范围应用NTILE(4)?

如何使用列值范围应用NTILE(4)?
EN

Stack Overflow用户
提问于 2020-05-21 07:01:58
回答 2查看 894关注 0票数 4

希望使用NTILE来查看按林地面积占国土总面积百分比的国家分布情况。我想使用的列中的数值范围是从0.00053到非常接近98.25,而且各国在该范围所暗示的四分位数中分布不均,即0至25、25至50、50至75和75至100。相反,NTILE只是将表分成四组,行数相同。如何使用NTILE根据值分配分位数?

代码语言:javascript
复制
SELECT country, forest, pcnt_forest,
       NTILE(4) OVER(ORDER BY pcnt_forest) AS quartile
FROM percent_forest
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-21 12:15:13

您可以使用case表达式:

代码语言:javascript
复制
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;

或者,更简单地说,使用算术:

代码语言:javascript
复制
select pf.*,
       floor(pcnt_forest * 4) + 1 bin
from percent_forest pf;

我不会用“四分位数”这个词来形容这个专栏。一个四分位数意味着四个大小相等的垃圾箱(或至少尽可能接近给定的重复值)。

票数 2
EN

Stack Overflow用户

发布于 2020-05-21 07:08:50

WIDTH_BUCKET函数在理想情况下与此场景匹配:

桶(甲骨文)允许您构造等宽直方图,其中直方图范围被划分为具有相同大小的间隔。(将此函数与NTILE进行比较,NTILE创建等高直方图。)

它支持甲骨文,雪花,PostgreSQL,蜂巢,.

你的代码:

代码语言:javascript
复制
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

db<>fiddle demo

输出:

代码语言:javascript
复制
+----------+--------------+----+-------+
| 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 |
+----------+--------------+----+-------+
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61929032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档