Как установить условие для конкретной детали в postgresql? - PullRequest
0 голосов
/ 15 ноября 2018

Вот мое заявление postgresql.

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

Как мне установить условие для средней части?

Я провел некоторое исследование и обнаружил, что interval кажется очень полезным. Но я не знаю, где установить условие.

Я просто хочу получить среднее значение для цвета, которое trandate было в последние 90 дней.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

вы можете попробовать как ниже

 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
0 голосов
/ 15 ноября 2018

Вот один подход:

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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...