使用 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'
我想查找 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'