You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery按AGE、ESPAC分组计算5-95分位数内变量统计值SQL求助

BigQuery 分组分位数截断后多指标统计实现

可直接运行的SQL语句

WITH quantile_thresholds AS (
  SELECT 
    *,
    -- 计算各变量按AGE+ESPAC分组的5%、95%分位阈值
    PERCENTILE_CONT(B2, 0.05) OVER(PARTITION BY AGE, ESPAC) AS B2_p5,
    PERCENTILE_CONT(B2, 0.95) OVER(PARTITION BY AGE, ESPAC) AS B2_p95,
    PERCENTILE_CONT(B3, 0.05) OVER(PARTITION BY AGE, ESPAC) AS B3_p5,
    PERCENTILE_CONT(B3, 0.95) OVER(PARTITION BY AGE, ESPAC) AS B3_p95,
    PERCENTILE_CONT(B4, 0.05) OVER(PARTITION BY AGE, ESPAC) AS B4_p5,
    PERCENTILE_CONT(B4, 0.95) OVER(PARTITION BY AGE, ESPAC) AS B4_p95,
    PERCENTILE_CONT(B8, 0.05) OVER(PARTITION BY AGE, ESPAC) AS B8_p5,
    PERCENTILE_CONT(B8, 0.95) OVER(PARTITION BY AGE, ESPAC) AS B8_p95,
    PERCENTILE_CONT(NDVI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS NDVI_p5,
    PERCENTILE_CONT(NDVI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS NDVI_p95,
    PERCENTILE_CONT(SAVI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS SAVI_p5,
    PERCENTILE_CONT(SAVI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS SAVI_p95,
    PERCENTILE_CONT(SIPI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS SIPI_p5,
    PERCENTILE_CONT(SIPI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS SIPI_p95,
    PERCENTILE_CONT(SR, 0.05) OVER(PARTITION BY AGE, ESPAC) AS SR_p5,
    PERCENTILE_CONT(SR, 0.95) OVER(PARTITION BY AGE, ESPAC) AS SR_p95,
    PERCENTILE_CONT(RGI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS RGI_p5,
    PERCENTILE_CONT(RGI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS RGI_p95,
    PERCENTILE_CONT(TVI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS TVI_p5,
    PERCENTILE_CONT(TVI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS TVI_p95,
    PERCENTILE_CONT(MSR, 0.05) OVER(PARTITION BY AGE, ESPAC) AS MSR_p5,
    PERCENTILE_CONT(MSR, 0.95) OVER(PARTITION BY AGE, ESPAC) AS MSR_p95,
    PERCENTILE_CONT(PRI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS PRI_p5,
    PERCENTILE_CONT(PRI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS PRI_p95,
    PERCENTILE_CONT(GNDVI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS GNDVI_p5,
    PERCENTILE_CONT(GNDVI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS GNDVI_p95,
    PERCENTILE_CONT(PSRI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS PSRI_p5,
    PERCENTILE_CONT(PSRI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS PSRI_p95,
    PERCENTILE_CONT(GCI, 0.05) OVER(PARTITION BY AGE, ESPAC) AS GCI_p5,
    PERCENTILE_CONT(GCI, 0.95) OVER(PARTITION BY AGE, ESPAC) AS GCI_p95
  FROM `[PROJECT_ID].spectra_calibration.CMPC`
),
filtered_data AS (
  SELECT 
    AGE,
    ESPAC,
    -- 过滤各变量仅保留区间内数值
    CASE WHEN B2 BETWEEN B2_p5 AND B2_p95 THEN B2 END AS B2,
    CASE WHEN B3 BETWEEN B3_p5 AND B3_p95 THEN B3 END AS B3,
    CASE WHEN B4 BETWEEN B4_p5 AND B4_p95 THEN B4 END AS B4,
    CASE WHEN B8 BETWEEN B8_p5 AND B8_p95 THEN B8 END AS B8,
    CASE WHEN NDVI BETWEEN NDVI_p5 AND NDVI_p95 THEN NDVI END AS NDVI,
    CASE WHEN SAVI BETWEEN SAVI_p5 AND SAVI_p95 THEN SAVI END AS SAVI,
    CASE WHEN SIPI BETWEEN SIPI_p5 AND SIPI_p95 THEN SIPI END AS SIPI,
    CASE WHEN SR BETWEEN SR_p5 AND SR_p95 THEN SR END AS SR,
    CASE WHEN RGI BETWEEN RGI_p5 AND RGI_p95 THEN RGI END AS RGI,
    CASE WHEN TVI BETWEEN TVI_p5 AND TVI_p95 THEN TVI END AS TVI,
    CASE WHEN MSR BETWEEN MSR_p5 AND MSR_p95 THEN MSR END AS MSR,
    CASE WHEN PRI BETWEEN PRI_p5 AND PRI_p95 THEN PRI END AS PRI,
    CASE WHEN GNDVI BETWEEN GNDVI_p5 AND GNDVI_p95 THEN GNDVI END AS GNDVI,
    CASE WHEN PSRI BETWEEN PSRI_p5 AND PSRI_p95 THEN PSRI END AS PSRI,
    CASE WHEN GCI BETWEEN GCI_p5 AND GCI_p95 THEN GCI END AS GCI
  FROM quantile_thresholds
)
SELECT 
  AGE,
  ESPAC,
  -- B2统计指标
  AVG(B2) AS B2_mean,
  MAX(B2) AS B2_max,
  MIN(B2) AS B2_min,
  STDDEV(B2) AS B2_std,
  -- B3统计指标
  AVG(B3) AS B3_mean,
  MAX(B3) AS B3_max,
  MIN(B3) AS B3_min,
  STDDEV(B3) AS B3_std,
  -- B4统计指标
  AVG(B4) AS B4_mean,
  MAX(B4) AS B4_max,
  MIN(B4) AS B4_min,
  STDDEV(B4) AS B4_std,
  -- B8统计指标
  AVG(B8) AS B8_mean,
  MAX(B8) AS B8_max,
  MIN(B8) AS B8_min,
  STDDEV(B8) AS B8_std,
  -- NDVI统计指标
  AVG(NDVI) AS NDVI_mean,
  MAX(NDVI) AS NDVI_max,
  MIN(NDVI) AS NDVI_min,
  STDDEV(NDVI) AS NDVI_std,
  -- SAVI统计指标
  AVG(SAVI) AS SAVI_mean,
  MAX(SAVI) AS SAVI_max,
  MIN(SAVI) AS SAVI_min,
  STDDEV(SAVI) AS SAVI_std,
  -- SIPI统计指标
  AVG(SIPI) AS SIPI_mean,
  MAX(SIPI) AS SIPI_max,
  MIN(SIPI) AS SIPI_min,
  STDDEV(SIPI) AS SIPI_std,
  -- SR统计指标
  AVG(SR) AS SR_mean,
  MAX(SR) AS SR_max,
  MIN(SR) AS SR_min,
  STDDEV(SR) AS SR_std,
  -- RGI统计指标
  AVG(RGI) AS RGI_mean,
  MAX(RGI) AS RGI_max,
  MIN(RGI) AS RGI_min,
  STDDEV(RGI) AS RGI_std,
  -- TVI统计指标
  AVG(TVI) AS TVI_mean,
  MAX(TVI) AS TVI_max,
  MIN(TVI) AS TVI_min,
  STDDEV(TVI) AS TVI_std,
  -- MSR统计指标
  AVG(MSR) AS MSR_mean,
  MAX(MSR) AS MSR_max,
  MIN(MSR) AS MSR_min,
  STDDEV(MSR) AS MSR_std,
  -- PRI统计指标
  AVG(PRI) AS PRI_mean,
  MAX(PRI) AS PRI_max,
  MIN(PRI) AS PRI_min,
  STDDEV(PRI) AS PRI_std,
  -- GNDVI统计指标
  AVG(GNDVI) AS GNDVI_mean,
  MAX(GNDVI) AS GNDVI_max,
  MIN(GNDVI) AS GNDVI_min,
  STDDEV(GNDVI) AS GNDVI_std,
  -- PSRI统计指标
  AVG(PSRI) AS PSRI_mean,
  MAX(PSRI) AS PSRI_max,
  MIN(PSRI) AS PSRI_min,
  STDDEV(PSRI) AS PSRI_std,
  -- GCI统计指标
  AVG(GCI) AS GCI_mean,
  MAX(GCI) AS GCI_max,
  MIN(GCI) AS GCI_min,
  STDDEV(GCI) AS GCI_std
FROM filtered_data
GROUP BY AGE, ESPAC
ORDER BY AGE, ESPAC;

说明

  • 执行前将SQL中[PROJECT_ID]替换为实际的BigQuery项目ID即可
  • 每个变量独立计算分组分位数阈值、独立过滤,区间外的数值会被置为NULL,聚合函数自动忽略NULL值,不会参与统计计算
  • 最终输出每行对应一个AGE+ESPAC分组,包含15个目标变量各4个统计指标,完全符合需求

内容的提问来源于stack exchange,提问作者Leprechault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:15:00