
[英]For the GROUP BY function in PostgreSQL, how to set a value if any rows meet a condition?
[英]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.