【问题标题】:SQL Server Querying PercentilesSQL Server 查询百分位数
【发布时间】:2021-06-22 20:07:09
【问题描述】:

我想在 SQL Server 中查询一个表的百分位数。例如,我想创建一个仅列出第 x 个百分位数的变量,在此示例中,假设为第 90 到第 100。对于这六个值,第 90 个百分位数从 487.5 开始,因此新列中应该只有 596。

ID     Age
A      215        
A      379        
A      116        
A      596        
A      177        
A      195  

所需的数据拉取:

ID     Age    P90_100
A      215        0
A      379        0
A      116        0
A      596        596
A      177        0
A      195        0

任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server percentile


    【解决方案1】:

    如果你真的想要百分位数,你可以使用ntile()case

    select t.*,
           (case when ntile(10) over (partition by id order by age) = 10
                 then age else 0
            end)
    from t;
    

    但是,这不会返回您指定的结果。

    所以,我认为您的意思有所不同。那就是你想要从最小值到最大值的 90%。那是不是一个百分位;它是范围的一小部分。

    但你也可以计算:

    select t.*,
           (case when age > min(age) over () + 0.9 * (max(age) over (partition by id) - min(age) over (partition by id))
                 then age
            end)
    from t;
    

    Here 是一个 dbfiddle。

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多