Considerando uma consulta com CTEs:
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
Seria correto deixar o último FROM
de fora? E recebo uma tupla de dois números com uma consulta como essa? Ou preciso de uma nova tabela da qual possa SELECT *
obter dois números?
Acabei de iniciar meu primeiro projeto PostgreSQL e vi diferentes estilos de escrevê-lo. Todos os comentários sobre o estilo são calorosamente bem-vindos. Não encontrei nenhuma plataforma PostgreSQL online adequada para testar consultas. Há alguns?
Pergunta editada para incluir condições e um resultado mais complicado.
Sim, não faz sentido ter esse extra
FROM
, pois você não está selecionando nada dessas tabelas, os resultados vêm inteiramente das subconsultas.Ou isso, ou você deve remover the
FROM
nas subconsultas, o que seria mais idiomático.Em outras palavras, você também pode fazer isso (observe o uso de
CROSS JOIN
junções de vírgula explícitas em vez de implícitas)Dito isto, você não deve fazer nenhuma dessas três opções. Você pode fazer ambas as agregações a partir de uma única referência de tabela.
Na sua pergunta (agora modificada), você pode usar agregação condicional. No PostgreSQL isso é feito usando a
FILTER
cláusula.