On 12-09-2012 23:28, Eduardo Almeida wrote: > Olá senhores, alguma alma caridosa poderia me ajudar a resolver essa > questão? Não precisa ser a solução, pode ser algo para leitura. Já quebrei > cabeça aqui e não consigo chegar numa solução. > > Preciso somar todos os valores de uma coluna em circunstâncias diferentes na > mesma cláusula SQL. Para retratar melhor minha necessidade, vou esboçar a > soma abaixo através de duas cláusulas, vamos lá > > SELECT SUM(total) as receitas_consolidadas > FROM tbl_financeiro_fluxo_de_caixa > WHERE id_conta = ? AND tipo_de_operacao = 'C' AND situacao = > 'Recebido' AND date_part('month', data_do_recebimento) = 1 > group by total, data_do_recebimento; > > SELECT SUM(total) as despesas_liquidadas > FROM tbl_financeiro_fluxo_de_caixa > WHERE id_conta = ? AND tipo_de_operacao = 'D' AND situacao = 'Pago' > AND date_part('month', data_do_pagamento) = 1 > group by total, data_do_pagamento; > > Eu gostaria de otimizar isso e colocar tudo numa só cláusula.
SELECT SUM(total) as receitas_consolidadas, tipo_de_operacao, situacao FROM tbl_financeiro_fluxo_de_caixa WHERE id_conta = ? AND tipo_de_operacao in ('C', 'D') AND situacao in ( 'Recebido', 'Pago') AND date_part('month', data_do_recebimento) = 1 GROUP BY tipo_de_operacao, situacao; Não entendi a dificuldade. Será que entendi sua pergunta corretamente? Vê se é isso... Aliás, sua consulta original tem erro. Você não deve agrupar por total porque é a coluna que você tá consolidando. E não dá pra agrupar por data_do_recebimento porque não tá listada no SELECT, aí seu date_part não servirá pra muita coisa também. Dá pra escrever de outras formas também. SELECT SUM(total) as receitas_consolidadas, tipo_de_operacao, situacao FROM tbl_financeiro_fluxo_de_caixa WHERE id_conta = ? AND (tipo_de_operacao = 'C' OR tipo_de_operacao = 'D') AND (situacao = 'Recebido' OR situacao = 'Pago') AND date_part('month', data_do_recebimento) = 1 GROUP BY tipo_de_operacao, situacao; Dá na mesma. Ah, troca a ordem das colunas no SELECT... que fica mais legível. Pode dar ORDER BY no tipo_de_operacao e situacao pra juntar mais bonitinho também. []s __________________________________ Flavio Henrique A. Gurgel Líder de Projetos Especiais Consultoria, Projetos & Treinamentos 4LINUX Tel1: +55-11.2125-4747 ou 2125-4748 www.4linux.com.br email: fla...@4linux.com.br ______________________________ FREE SOFTWARE SOLUTIONS _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral