您可以在单个Redshift查询中一起使用AVG()和PERCENTILE_DISC()函数吗?

Sco*_*den 3 amazon-redshift

我很难将这两个功能组合到一个查询中,例如:

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;
Run Code Online (Sandbox Code Playgroud)

这返回 ERROR: column "time_values.num_hours" must appear in the GROUP BY clause or be used in an aggregate function

Ale*_*Yes 6

AVG()既可以聚合(需要按某列分组)又可以是窗口函数(需要frame子句)。出现错误是因为您PERCENTILE已经使用了窗口函数,并且AVG函数不明显,但没有框架子句。要AVG在同一查询中使用,您需要模拟如下子句

AVG(num_hours) OVER ()
Run Code Online (Sandbox Code Playgroud)