考虑使用 CTE 的查询:
WITH cte_0 AS (
SELECT SUM(col_0)
FROM table_0
WHERE condition_00
AND condition_01
),
cte_1 AS (
SELECT SUM(col_1)
FROM table_0
WHERE condition_10
AND condition_11
)
SELECT (
((SELECT * FROM ct_0) * 100) / (SELECT * FROM ct_1),
((SELECT * FROM ct_0) + 100) * (SELECT * FORM ct_1)
) FROM cte_0, cte_1
把最后一个排除在外是否正确FROM
?我是否可以通过这样的查询得到两个数字的元组?或者我是否需要一张新表来SELECT *
获取两个数字?
我刚刚开始我的第一个 PostgreSQL 项目,并且看到了不同的编写风格。热烈欢迎所有关于风格的评论。我还没有找到任何合适的在线 PostgreSQL 平台来测试查询。有吗?
问题已编辑以包括条件和更复杂的结果。
是的,拥有额外的内容是没有意义的
FROM
,因为您没有从这些表中选择任何内容,结果完全来自子查询。要么这样,要么您应该删除子
FROM
查询中的 ,这会更惯用。换句话说,您也可以这样做(注意使用显式
CROSS JOIN
而不是隐式逗号连接)话虽如此,您不应该执行这三个选项中的任何一个。您可以从单个表引用执行这两种聚合。
在您的(现已修改)问题中,您可以使用条件聚合。在 PostgreSQL 中,这是使用
FILTER
子句完成的。