通过添加其他两个 table 的列在 Redshift 中创建一个 table
create a table in Redshift by adding columns of the other two tables
我想通过添加其他两个 table 的列在 Redshift 中创建一个 table。
Table 1
Table 2
想要在以下条件下创建新的 table
- if table1.sid = table2.sid
然后 t1.totalcorrect+t2.totalcorrect、t1.totalquestions+t2.totalquestions。即 s4 到 s7
- 来自两个 table 的其他数据
预期输出
使用连接结果 table 只给我 S4 到 S7 而不是所需的其他列。请帮助我
那是 full join
:
select
coalesce(t1.sid, t2.sid) sid,
coalesce(t1.totalcorrect, 0) + coalesce(t2.totalcorrect, 0) totalcorrect,
coalesce(t1.totalquestions, 0) + coalesce(t2.totalquestions, 0) totalquestions
from t1
full join t2 on t2.sid = t1.sid
有两种方法可以做到这一点,我不确定在 Redshift 中哪种方法更快。一个是 union all
和 group by
:
select sid, sum(totalcorrect) as totalcorrect, sum(totalquestions) as totalquestions
from ((select sid, totalcorrect, totalquestions
from t1
) union all
(select sid, totalcorrect, totalquestions
from t2
)
) t
group by sid;
第二个使用full join
,为此我建议使用using
子句:
select sid,
coalesce(t1.totalcorrect, 0) + coalesce(t2.totalcorrect, 0) as totalcorrect,
coalesce(t1.totalquestions, 0) + coalesce(t2.totalquestions, 0) as totalquestions
from t1 full join
t2
using (sid);
这两种方法之间存在差异。第一个保证结果集中每个 sid
一行,即使其中一个表中有重复项也是如此。第一个还将 sid
的 NULL
值组合成一行。
我想通过添加其他两个 table 的列在 Redshift 中创建一个 table。
Table 1
Table 2
想要在以下条件下创建新的 table
- if table1.sid = table2.sid
然后 t1.totalcorrect+t2.totalcorrect、t1.totalquestions+t2.totalquestions。即 s4 到 s7 - 来自两个 table 的其他数据
预期输出
使用连接结果 table 只给我 S4 到 S7 而不是所需的其他列。请帮助我
那是 full join
:
select
coalesce(t1.sid, t2.sid) sid,
coalesce(t1.totalcorrect, 0) + coalesce(t2.totalcorrect, 0) totalcorrect,
coalesce(t1.totalquestions, 0) + coalesce(t2.totalquestions, 0) totalquestions
from t1
full join t2 on t2.sid = t1.sid
有两种方法可以做到这一点,我不确定在 Redshift 中哪种方法更快。一个是 union all
和 group by
:
select sid, sum(totalcorrect) as totalcorrect, sum(totalquestions) as totalquestions
from ((select sid, totalcorrect, totalquestions
from t1
) union all
(select sid, totalcorrect, totalquestions
from t2
)
) t
group by sid;
第二个使用full join
,为此我建议使用using
子句:
select sid,
coalesce(t1.totalcorrect, 0) + coalesce(t2.totalcorrect, 0) as totalcorrect,
coalesce(t1.totalquestions, 0) + coalesce(t2.totalquestions, 0) as totalquestions
from t1 full join
t2
using (sid);
这两种方法之间存在差异。第一个保证结果集中每个 sid
一行,即使其中一个表中有重复项也是如此。第一个还将 sid
的 NULL
值组合成一行。