繁体   English   中英

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

[英]How to set condition for specific part in postgresql?

这是我的PostgreSQL语句。

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

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

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

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

这是一种方法:

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";

你可以尝试如下

 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM