【问题标题】:Big Query: Get Closest Percentile Value大查询:获取最接近的百分位值
【发布时间】:2018-02-16 22:03:10
【问题描述】:

我有一个使用 Big Query 中的 PERCENT_RANK() 函数生成的大百分位数表。表输出生成许多数据行,这些数据的百分位数非常接近。我希望只返回 10 行,其值接近第 100、第 90、第 80、第 70 等百分位数。

更具体地说,我正在寻找最接近第 80 个百分位 (.8) 并具有以下示例值的数字:

.81876543 .81123141 .80121214 .80012123 .80001213 .80001112 .79999121

在这种情况下,.80001112 最接近 .8。

有没有我可以使用的 SQL 函数,它只返回最接近这些百分位数的十个值。

【问题讨论】:

标签: google-bigquery analytics


【解决方案1】:

以下示例适用于 BigQuery 标准 SQL

#standardSQL
WITH `project.dataset.percentiles` AS (
  SELECT .81876543 percentile UNION ALL
  SELECT .81123141 UNION ALL
  SELECT .80121214 UNION ALL
  SELECT .80012123 UNION ALL
  SELECT .80001213 UNION ALL
  SELECT .80001112 UNION ALL
  SELECT .79999121 
), targets AS (
   SELECT check
   FROM UNNEST([1, .9, .8, .7, .6, .5, .4, .3, .2, .1]) check
)
SELECT check, ARRAY_AGG(percentile ORDER BY ABS(percentile - check) LIMIT 10) val
FROM `project.dataset.percentiles`
CROSS JOIN targets
WHERE ABS(percentile - check) < .05
GROUP BY check
ORDER BY check

以上为每个百分位数提供 10 个最接近的值 - 100%、90%、80% 等

如果您每个人只需要一个 - 您可以查看以下查询

#standardSQL
WITH `project.dataset.percentiles` AS (
  SELECT .81876543 percentile UNION ALL
  SELECT .81123141 UNION ALL
  SELECT .80121214 UNION ALL
  SELECT .80012123 UNION ALL
  SELECT .80001213 UNION ALL
  SELECT .80001112 UNION ALL
  SELECT .79999121 
), targets AS (
   SELECT check
   FROM UNNEST([1, .9, .8, .7, .6, .5, .4, .3, .2, .1]) check
)
SELECT check, ARRAY_AGG(percentile ORDER BY ABS(percentile - check) LIMIT 1)[SAFE_OFFSET(0)] val
FROM `project.dataset.percentiles`
CROSS JOIN targets
WHERE ABS(percentile - check) < .05
GROUP BY check
ORDER BY check

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 2020-11-06
    • 2014-03-30
    • 1970-01-01
    • 2015-02-14
    • 2014-03-01
    • 1970-01-01
    • 2020-03-20
    • 2018-12-06
    相关资源
    最近更新 更多