sql - BigQuery 标准 SQL : How to get median of difference between two columns?

标签 sql google-bigquery

将方言设置为标准 SQL 后,如何获得表中减去两列后的中位数差?

这些是我尝试过但失败的事情:

SELECT
  symbol,
  median(max_height-min_height)
FROM
  `body_table-1345.bodies.heights`
WHERE
  symbol = 'mouse_1344'
  AND max_height> 0
  AND min_height> 0
  AND (measure_date> '2017-11-01 08:45:00.000 UTC'
    AND measure_date< '2017-11-30 17:00:00.000 UTC')
GROUP BY
  symbol

但我收到错误错误:找不到函数:中位数在 [3:3]

以下内容适用于旧版 SQL,但不适用于标准 SQL:

SELECT
  symbol,
  NTH(501, QUANTILES(max_height-min_height, 1001))
FROM
  `body_table-1345.bodies.heights`
WHERE
  symbol = 'mouse_1344'
  AND max_height> 0
  AND min_height> 0
  AND (measure_date> '2017-11-01 08:45:00.000 UTC'
    AND measure_date< '2017-11-30 17:00:00.000 UTC')
GROUP BY
  symbol

我想要减去的列是 max_heightmin_height

最佳答案

相反,您可以使用 ANSI 标准百分位数函数的细微变化。

SELECT DISTINCT symbol,
       percentile_cont(max_height-min_height, 0.5) over (partition by symbol )
FROM `body_table-1345.bodies.heights`
WHERE symbol = 'mouse_1344' AND
      max_height > 0 AND
      min_height > 0 AND
      (measure_date> '2017-11-01 08:45:00.000 UTC' AND
       measure_date< '2017-11-30 17:00:00.000 UTC'
      );

不幸的是,这是分析函数之一,只能作为分析函数使用,而不能作为聚合函数使用。因此,使用 SELECT DISTINCT 语法而不是 GROUP BY

关于sql - BigQuery 标准 SQL : How to get median of difference between two columns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48410145/

相关文章:

sql在使用order by时分配一个类别id

mysql - MySQL 中 CASE 语句中的 REGEXP

MySQL 按同级表中的匹配项数量排序

Mysql 查询连接回同一个表并进行计数

google-bigquery - 除了性能改进之外,如何最好地利用电容器的引入?

sql - 当一列是文本而另一列是数字时,内部连接两个表

google-app-engine - 从 Google BigQuery 提取结果到云存储 golang

java - TupleTag Tag <taginfo> 对应一个非单例结果

google-analytics - 通过 BigQuery 访问 Firebase 封闭漏斗中的结构和数组

sql - Bigquery - json_extract 从数组中提取所有元素