通过添加其他两个 table 的列在 Redshift 中创建一个 table

create a table in Redshift by adding columns of the other two tables

我想通过添加其他两个 table 的列在 Redshift 中创建一个 table。

Table 1

Table 2

想要在以下条件下创建新的 table

  1. if table1.sid = table2.sid
    然后 t1.totalcorrect+t2.totalcorrect、t1.totalquestions+t2.totalquestions。即 s4 到 s7
  2. 来自两个 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 allgroup 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 一行,即使其中一个表中有重复项也是如此。第一个还将 sidNULL 值组合成一行。