【问题标题】:PostgreSQL multiple column outputs using where clausePostgreSQL 使用 where 子句的多列输出
【发布时间】:2020-11-18 15:35:48
【问题描述】:
我想找到 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')
【问题讨论】:
标签:
sql
postgresql
average
aggregate-functions
where-clause
【解决方案1】:
您可以使用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'