And*_*nin 5 sql postgresql aggregate-functions common-table-expression
我的查询遵循以下结构:
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 位
被t2.count解释为聚合 COUNT() 函数,并且您的 t2 表没有名为 的列count。
确保您的表确实有一count列,或者确保在加入之前计算另一个 CTE 上的聚合计数,然后比较结果。还要避免使用别名“count”,如下所示:
WITH CTE AS (
SELECT t1.x, COUNT(t1.y) AS total
FROM table1 t1
GROUP BY t1.x
),
CTE2 AS (
SELECT t2.x, COUNT(t2.y) AS total
FROM table2 t2
GROUP BY t2.x
)
SELECT
CTE1.x,
CTE1.total AS newCount,
CTE2.total AS oldCount
FROM
CTE2
JOIN CTE1 ON CTE2.x = CTE1.x
WHERE
CTE2.total != CTE1.total;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
655 次 |
| 最近记录: |