Как объединить два запроса в PostgreSQL? - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу написать запрос в PostgresSQL, который возвращает ежемесячный счетчик продаж по заданному диапазону дат.

У меня есть 2 запроса - 1 возвращает счетчик продаж, а другой возвращает список месяцев по диапазону дат (дата начала)и дата окончания)

Запрос 1: (возвращается счетчик продаж)

SELECT count(overall_sl) total_sales, count(CASE WHEN overall_sl < value_1 THEN 1 END) faled_sales
            FROM  (
                SELECT overall_sl, value_1
                FROM   combined c 
                GROUP  BY dept_name, date_updated, date, overall_sl, no_addons,  
                value_1, category_id, subcategory_id, branch_name
              ) sales;

Output:
total sales     failed_sales
----------------------------
1047            54

Запрос 2: (Возвращается список месяцев для данных двух дат)

WITH date_ranges AS (
    SELECT 
      min(date_trunc('month', timestamp '2018-01-01')) min_start,
      max(date_trunc('month', timestamp '2018-12-11'))  max_end
    )
    SELECT 
       ser.month::DATE as st_month,
       (date_trunc('month', ser.month::DATE) + interval '1 month' - interval '1 day')::date as end_month,

       0 as total_sales,
       0 as failed_sales
    FROM date_ranges AS dr,
         generate_series(min_start, max_end, '1 month') AS ser(month) 

Output:
st_date     end_date   total_sales    failed_sales
----------  ----------  ----------    ------------
2018-01-01  2018-01-31  0             0
2018-02-01  2018-02-28  0             0

Мне нужно присоединиться к этим запросам, как показано на этом рисунке ниже

Query

Как мне написать этот запрос в Postgres SQL?

1 Ответ

0 голосов
/ 10 декабря 2018

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

with cte as
(
SELECT count(overall_sl) total_sales, count(CASE WHEN overall_sl < value_1 THEN 1 END) faled_sales
            FROM  (
                SELECT overall_sl, value_1
                FROM   combined c 
                GROUP  BY dept_name, date_updated, date, overall_sl, no_addons,  
                value_1, category_id, subcategory_id, branch_name
              ) sales
), 
date_ranges AS 
(
    SELECT 
      min(date_trunc('month', timestamp '2018-01-01')) min_start,
      max(date_trunc('month', timestamp '2018-12-11'))  max_end
),
cte2 as
(
SELECT 
       ser.month::DATE as st_month,
       (date_trunc('month', ser.month::DATE) + interval '1 month' - interval '1 day')::date as end_month,

       0 as total_sales,
       0 as failed_sales
    FROM date_ranges AS dr,
         generate_series(min_start, max_end, '1 month') AS ser(month)
) select cte.*,cte2.* from cte join cte2 on cte.total_sales=cte2.total_sales and cte.failed_sales=cte2.failed_sales
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...