使用 where 子句的 PostgreSQL 多列输出

PostgreSQL multiple column outputs using where clause

我想查找 2 个时间段内一列的平均值,但我不确定如何在单个查询中显示这两个时间段。我知道以下内容不起作用,但我正在寻找正确的语法:

SELECT
AVG(amount) AS avg_amt
FROM table
WHERE day >= date('2019-05-05') AND day<= date('2019-07-04'),
AVG(amount) AS avg_amt2
WHERE day >= date('2019-07-05') AND day<= date('2019-09-04')

您可以使用 FILTER 子句来聚合函数:

SELECT
    AVG(amount) FILTER(WHERE day >= date '2019-05-05' AND day <= date '2019-07-04') AS avg_amt1,
    AVG(amount) FILTER(WHERE day >= date '2019-07-05' AND day <= date '2019-09-04') AS avg_amt2
FROM table

我们可以使用 WHERE 子句稍微优化一下查询:

SELECT
    AVG(amount) FILTER(WHERE day <= date '2019-07-04') AS avg_amt1,
    AVG(amount) FILTER(WHERE day >= date '2019-07-05') AS avg_amt2
FROM table
WHERE day >= date '2019-05-05' AND day <= date '2019-09-04'