如何在PostgreSQL中为特定部分设置条件?

时间:2018-11-15 02:56:10

标签: sql postgresql

这是我的postgresql语句。

select sum("Color") as color,round(avg("Color")) as avg_color 
from "color_table"

如何设置平均零件的条件?

我做了一些研究,发现interval似乎很有用。但是我不知道在哪里设置条件。

我只想获取trandate从现在开始过去90天内的颜色平均值。

2 个答案:

答案 0 :(得分:2)

这是一种方法:

SELECT
    SUM(Color) AS color,
    ROUND(AVG(CASE WHEN trandate < NOW() - INTERVAL '90 DAYS'
                   THEN Color END)) AS avg_color 
FROM "color_table";

这将您的要求解释为想要trandate超过90天的平均记录。相反,如果您想在最近90天之内 ,则逆转不平等。

如果您使用的是Postgres 9.4或更高版本,则还可以使用FILTER子句:

SELECT
    SUM(Color) AS color,
    ROUND(AVG(Color) FILTER (WHERE trandate < NOW() - INTERVAL '90 DAYS')) AS avg_color
FROM "color_table";

答案 1 :(得分:0)

您可以尝试以下操作

 with cte as
   ( select SUM(Color) AS color,0 as avg_color 
    FROM "color_table"
    union all
    select 0, avg(Color ) FROM "color_table"
    where trandate < NOW() - INTERVAL '90 DAYS'
  ) select max(color) as color ,max(avg_color) as avg_color from cte