#sql #postgresql
#sql #postgresql
Вопрос:
как можно сравнить два периода, используя, например, один запрос:
SELECT s_campaign_id, COALESCE(SUM(f_revenue),0) AS revenue FROM tbl_reports WHERE (d_gen_date>='2020-12-15' AND d_gen_date<='2020-12-16') GROUP BY s_campaign_id
и сравните это с доходом другого периода в том же запросе, например, я хочу получить список доходов за период 1 период 2
SELECT s_campaign_id, COALESCE(SUM(f_revenue),0) AS revenue FROM tbl_reports WHERE (d_gen_date>='2020-12-15' AND d_gen_date<='2020-12-16') as revenue1 AND (d_gen_date>='2019-12-13' AND d_gen_date<='2020-12-14') as revenue2 GROUP BY s_campaign_id
Спасибо
Ответ №1:
Вы могли бы использовать ФИЛЬТР:
SELECT
s_campaign_id
, COALESCE ( SUM ( f_revenue ) FILTER(WHERE d_gen_date >= '2020-12-15' AND d_gen_date <= '2020-12-16'), 0 ) AS revenue1
, COALESCE ( SUM ( f_revenue ) FILTER(WHERE d_gen_date >= '2019-12-13' AND d_gen_date <= '2020-12-14'), 0 ) AS revenue2
FROM
tbl_reports
WHERE
( d_gen_date >= '2020-12-15' AND d_gen_date <= '2020-12-16' )
OR
( d_gen_date >= '2019-12-13' AND d_gen_date <= '2020-12-14' )
GROUP BY
s_campaign_id;
Ответ №2:
Используйте условную агрегацию и OR
выполните следующие действия:
SELECT s_campaign_id,
SUM(case when d_gen_date>='2020-12-15' AND d_gen_date<='2020-12-16'
then f_revenue end) AS revenue1,
SUM(case when d_gen_date>='2020-12-13' AND d_gen_date<='2020-12-14'
then f_revenue end) AS revenue2
FROM tbl_reports
WHERE (d_gen_date>='2020-12-15' AND d_gen_date<='2020-12-16')
OR (d_gen_date>='2019-12-13' AND d_gen_date<='2020-12-14')
GROUP BY s_campaign_id
Комментарии:
1. спасибо, если доход равен нулю, как его можно установить равным 0?