我有两个表,第一个表(table1)包含id,dat_beg,句点,dat_end。第二个表(表2)包含多个列,包括 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
答案 0 :(得分:1)
此查询实际上存在很多问题。我将发布我认为可能有用的内容,然后发布我不确定的内容。
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
问题:
table2
?table1
,那里没有任何意义。我改为x
; x
子查询中有没有在外部查询中使用的列; perid
的东西,但是那并不存在,我想它应该是sum_period
?编辑
答案 1 :(得分:0)
您的查询似乎正确,除了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