相关疑难解决方法(0)

将常见查询存储为列?

使用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中与记录相关的特定列的总和.这可能吗?

postgresql database-design view

36
推荐指数
1
解决办法
2万
查看次数

CTE 的聚合列不能在 PostgreSQL 查询的 WHERE 子句中使用

我的查询遵循以下结构:

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 位

sql postgresql aggregate-functions common-table-expression

5
推荐指数
1
解决办法
655
查看次数