将方言设置为标准 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_height
和 min_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/