делать левое соединение на столах - PullRequest
0 голосов
/ 16 июня 2020

У меня есть две таблицы, первая таблица (table1) содержит id, dat_beg, period, dat_end. Вторая таблица (table2) содержит несколько столбцов, включая cod_client и cod_contract . Я хочу выполнить левое соединение с упомянутыми таблицами. Кто-нибудь знает, что не так в моем коде?

Заранее спасибо,

select id, DATE_TRUNC('day', table1.dat_beg) as date, s1, cod_client, sum(perid) as sum_period from (
select id, table1.dat_end, x, table1.dat_beg , 
(case when TRIM(x) like 'cat/%' then 'cat'
when TRIM(x) like 'fol/%' then 'follower'
else 'unknown'
end) as s1,
(extract(epoch from (table1.dat_end - table1.dat_beg)))/60 as sum_period
from table1 left join table2 on table1.id = table2.cod_contract
where table1.dat_end < '2262-04-11' and table1.dat_beg >= '2019-01-10'
) X
group by table1.id, table1.s1, table1.date

Ответы [ 2 ]

1 голос
/ 16 июня 2020

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

SELECT 
    x.id, 
    DATE_TRUNC('day', x.dat_beg) AS date_day, 
    x.s1, 
    x.cod_client, 
    SUM(x.sum_period) AS sum_period 
FROM 
    (
        SELECT 
            id, 
            table1.dat_beg, 
            table2.cod_client,
            CASE 
                WHEN TRIM(x) LIKE 'cat/%' THEN 'cat'
                WHEN TRIM(x) LIKE 'fol/%' THEN 'follower'
                ELSE 'unknown'
            END AS s1,
            (EXTRACT(epoch FROM (table1.dat_end - table1.dat_beg)))/60 AS sum_period
        FROM 
            table1 
            LEFT JOIN table2 ON table1.id = table2.cod_contract
        WHERE 
            table1.dat_end < '2262-04-11' 
            AND table1.dat_beg >= '2019-01-10'
    ) x
GROUP BY 
    x.id, 
    DATE_TRUNC('day', x.dat_beg), 
    x.s1, 
    x.cod_client

Проблемы:

  • cod_client не включен в подпрограмму -query, поэтому я догадался, что это произошло из table2?
  • , на которое вы ссылались table1 вне подзапроса, где он не имеет значения. Вместо этого я изменил это на x;
  • у вас было много лишних (ненужных (действительно!)) Скобок;
  • в вашем подзапросе x были столбцы, которые не использовались во внешнем запросе;
  • вы суммировали что-то под названием perid, но этого нигде не существовало, я предположил, что это должно было быть sum_period?

РЕДАКТИРОВАТЬ

Демо на Fiddle

0 голосов
/ 16 июня 2020

Ваш запрос кажется правильным, за исключением предложения GROUP BY и функции SUM -

SELECT id, 
       Date_trunc('day', table1.dat_beg) AS date, 
       s1, 
       cod_client, 
       Sum(sum_period)                        AS perid 
FROM   (SELECT id, 
               table1.dat_end, 
               x, 
               table1.dat_beg, 
               ( CASE 
                   WHEN Trim(x) LIKE 'cat/%' THEN 'cat' 
                   WHEN Trim(x) LIKE 'fol/%' THEN 'follower' 
                   ELSE 'unknown' 
                 END ) 
               AS s1, 
               ( Extract(epoch FROM ( table1.dat_end - table1.dat_beg )) ) / 60 
               AS 
                      sum_period 
        FROM   table1 
               LEFT JOIN table2 
                      ON table1.id = table2.cod_contract 
        WHERE  table1.dat_end < '2262-04-11' 
               AND table1.dat_beg >= '2019-01-10') X 
GROUP  BY id, 
       Date_trunc('day', table1.dat_beg), 
       s1, 
       cod_client
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...