【问题标题】: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'

【讨论】:

    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多