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

标签 sql window-functions quantile

想用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

最佳答案

您可以使用 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;

我不会在本专栏中使用“四分位数”一词。四分位数意味着四个大小相等的 bin(或至少在给定重复值的情况下尽可能接近)。

关于sql - 如何使用列值范围应用 NTILE(4)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61929032/

相关文章:

php - 仅当数据不存在时才将数据从一个表插入到另一个表

c# - ElasticSearch 6.0.1-SQL DISTINCT子句-NEST C#

sql - 按日期滚动求和的窗口函数

sql - 如何在Presto的SQL(Athena)中计算从一年开始的每个月的平均值?

c++ - 计算分位数而不存储

r - 在 Sparklyr 中按组计算分位数

sql - 使用HiveQL(Hadoop)在Hive中联接两个表

sql - MEAN-Stack - 无法从服务器读取第二个 SQL 表

mysql - 按月所有周的 SQL 平均值

python - 从 pandas qcut 间隔中删除小数点(将间隔转换为整数)