Postgres:平均值大于90,95和98百分位数

时间:2017-04-19 09:05:23

标签: sql postgresql percentile

我在一个包含多个整数记录的表中有一列。

我需要写一个PostgreSql查询,它将返回大于90,95和98百分位数的所有值的平均值。

e.g。

我的专栏中有1-150系列。

现在,如果我把这个专栏的第90个百分位数提高到135左右。

我需要计算所有大于135的值的平均值。

同样对于95和98百分位数。

如果可能的话,单个查询中的所有三个值。

2 个答案:

答案 0 :(得分:0)

作为样本我使用1到300之间的数字:

$("#inputACCO_KEY").autocomplete({
      source: function (request, response) {
        $.ajax({
          method: 'post',
          url: "/wsSeCAMERC/GetCA/",
          data: {
            prefixText: $("#inputACCO_KEY").val(),
            count: 30
          },
          dataType: 'json',
          success: function (data) {
            response($.map(data, function (item, i) {
              return {
                label: item.cACCO_NME,
                value: item.iACCO_KEY
              };
            })
            );
          },
          error: function (data) {
            alert('error!');
          }
        });
      },
      minLength: 3,
      select: function (event, ui) {
        $("#inputACCO_KEY").val(ui.item.label);
        $("#iACCO_KEY").val(ui.item.value);
        return false;
      }
    });
  });

这是一个例子:

t=#  select generate_series(1,300,1) g
 g
---
 1
 2
 3
 4
...

答案 1 :(得分:0)

如果我理解正确,可能你需要这个。

尝试:

with t(col) as(
    select * from generate_series(1, 150) 
)

select  
    (select avg(col) from t where col > (select count(*) * 90 / 100.00 from t)), 
    (select avg(col) from t where col > (select count(*) * 95 / 100.00 from t)),
    (select avg(col) from t where col > (select count(*) * 98 / 100.00 from t))