我很难将这两个函数组合到一个查询中,例如:
WITH time_values AS (
SELECT
(end_time - start_time) * 1.0 / 3600000000 AS num_hours
FROM table
WHERE
end_time >= 1493596800000000
AND start_time < 1493683200000000
)
SELECT
PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY num_hours) OVER() AS p25,
PERCENTILE_DISC(0.50) WITHIN GROUP (ORDER BY num_hours) OVER() AS p50,
PERCENTILE_DISC(0.80) WITHIN GROUP (ORDER BY num_hours) OVER() AS p80,
PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY num_hours) OVER() AS p99,
AVG(num_hours)
FROM time_values;
这将返回错误:列“time_values.num_hours”必须出现在 GROUP BY 子句中或用于聚合函数
最佳答案
AVG()
可以是聚合(需要按某些列分组)和窗口函数(需要 frame 子句)。出现该错误是因为您已经使用了一个窗口函数 PERCENTILE
并且没有用于 AVG
函数的框架子句,尽管它并不明显。要在同一查询中使用 AVG
,您需要模拟看起来像这样的子句
AVG(num_hours) OVER ()
关于amazon-redshift - 您可以在单个 Redshift 查询中同时使用 AVG() 和 PERCENTILE_DISC() 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682256/