使用PostgreSQL,我有很多查询,如下所示:
SELECT <col 1>, <col 2>
, (SELECT sum(<col x>)
FROM <otherTable>
WHERE <other table foreignkeyCol>=<this table keycol>) AS <col 3>
FROM <tbl>
Run Code Online (Sandbox Code Playgroud)
鉴于子选择在每种情况下都是相同的,有没有办法将该子选择存储为表中的伪列?基本上,我希望能够从表A中选择一列,它是表B中与记录相关的特定列的总和.这可能吗?
我的查询遵循以下结构:
WITH CTE AS (
SELECT t1.x, COUNT(t1.y) AS count
FROM table1 t1
GROUP BY t1.x
)
SELECT CTE.x, CTE.count AS newCount, t2.count AS oldCount
FROM table2 t2 JOIN CTE ON t2.x = CTE.x
WHERE t2.count != CTE.count;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:[42803] ERROR: aggregate functions are not allowed in WHERE
看起来是CTE.count触发此错误的聚合。CTE 不是应该在主查询之前计算吗?如何重写查询以避免这种情况?
x86_64-pc-linux-gnu 上的 PostgreSQL 13.2,由 gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5) 编译,64 位