Amazon redshift 能否在单个红移查询中同时使用AVG()和PERCENTILE_DISC()函数?

Amazon redshift 能否在单个红移查询中同时使用AVG()和PERCENTILE_DISC()函数?,amazon-redshift,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 PERCENT

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

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子句。出现此错误是因为您已经使用了窗口函数百分位,并且AVG函数没有frame子句,尽管它不明显。要在同一查询中使用AVG,您需要模拟如下所示的子句

AVG(num_hours) OVER ()

谢谢接下来,这是一个单独的问题吗?:到目前为止,我的查询为每个var返回多行数据,其中包含相同的数据。有没有办法将它限制为每个var值返回一条记录?是的,因为它是一个窗口函数而不是聚合。。。然后,你必须在你的选择中添加distinct,你就是setAh——这太棒了。谢谢