SQL:SQL查询中两处的Where子句

SQL:SQL查询中两处的Where子句,sql,postgresql,Sql,Postgresql,我有一个独特的要求,即我必须从多个表中获取数据,并且我不能执行多个SQL查询 共有两个表,Table1和Table2 表1中的列为: C1 C2 C3 ---------------- 1 1 10 2 3 20 3 5 30 4 8 40 C1 C2 C3 --------------- 1 1 10 2 3 20 3 5 30 4 8 40

我有一个独特的要求,即我必须从多个表中获取数据,并且我不能执行多个SQL查询

共有两个表,
Table1
Table2

表1中的列为:

C1    C2    C3
----------------
1     1     10
2     3     20
3     5     30
4     8     40
C1    C2    C3
---------------
1     1     10
2     3     20
3     5     30
4     8     40
表2中的列为:

C1    C2    C3
----------------
1     1     10
2     3     20
3     5     30
4     8     40
C1    C2    C3
---------------
1     1     10
2     3     20
3     5     30
4     8     40
查询逻辑上是这样的:(这在语法上没有运行)

请忽略查询的语法

我的问题是,我在两个地方应用了where子句,这就是我必须做的,因为我无法将内部where拉出,因为这最终会妨碍我的结果集,在这种情况下,别名3将不正确

除了将查询分为两个查询之外,我还有其他选择吗

我越来越

SQL错误[42601]:错误:在“where”处或附近出现语法错误


在我的playpen中,我将无法共享真正的查询。但是要点是相同的。

您可以使用
filter()
子句进行聚合:

select t1.c1 as alias1,
       sum(t1.c2) filter (where t1.c3>20) as alias2,
       t1.c2 as alias3,
       t2.c2 as alias4
from Table1 t1
  left join Table2 t2 on t1.c1=t2.c2
where t1.c1 in (1,2,3)
group by ....

将单个(单个)列放在括号之间是完全没有用的。

求和(当t1.c3>20,则t1.c2否则0结束时)作为别名2