ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Somar um select Postgres
Ir à página 1, 2, 3, 4  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Jan 23, 2017 2:04 pm    Assunto: Somar um select Postgres Responder com Citação

Tem como gerar a soma total deste select aqui
Código:

SELECT
                    v.data_venda, v.hora_venda, cl.nome, v.id,
                    ( SELECT sum(qtd)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS qtd,
                     
                    ( SELECT sum(qtd * preco_venda)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS p_venda,

                    ( SELECT sum( ( qtd * preco_tabela ) - ( qtd * preco_venda ) )
                      FROM venda_itens
                       WHERE id_venda = v.id ) AS p_desconto,
                       
                    ( SELECT SUM( vv.qtd * pp.custo)
                      FROM
                        venda_itens vv
                      INNER JOIN  produto pp ON vv.codigo_barra = pp.codigo_barra
                      WHERE pp.id_cadastro = v.id_cadastro
                      AND vv.id_venda = v.id
                    ) as p_custo
                   
                FROM
                    venda v
                INNER JOIN cliente cl ON cl.id = v.id_cliente
                WHERE
                    v.id_cadastro = 23096
                AND
                    v.situacao    = 'C'
                AND
                    v.data_venda
                BETWEEN  '01/01/2016' AND  '31/12/2017'
                ORDER BY v.data_venda asc

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jan 24, 2017 9:43 am    Assunto: Responder com Citação

Bom dia,

Não sei se vou conseguir ajudar, mas você quer obter somente a soma total ou o resultado normal com a soma total no final?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jan 24, 2017 5:11 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Não sei se vou conseguir ajudar, mas você quer obter somente a soma total ou o resultado normal com a soma total no final?


Boa tarde Imex,

A soma total dos campos envolvidos.

Da pra eu fazer utilizando um loop deste resultado, mais gostarias de saber se tem como ter o resultado final no select montado ai.

Obrigado.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jan 24, 2017 5:34 pm    Assunto: Responder com Citação

Boa tarde,

Experimente fazer uns testes dessa forma:

Código:
with CTE_Vendas as
(
    SELECT
                    ( SELECT sum(qtd)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS qtd,
                     
                    ( SELECT sum(qtd * preco_venda)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS p_venda,

                    ( SELECT sum( ( qtd * preco_tabela ) - ( qtd * preco_venda ) )
                      FROM venda_itens
                       WHERE id_venda = v.id ) AS p_desconto,
                       
                    ( SELECT SUM( vv.qtd * pp.custo)
                      FROM
                        venda_itens vv
                      INNER JOIN  produto pp ON vv.codigo_barra = pp.codigo_barra
                      WHERE pp.id_cadastro = v.id_cadastro
                      AND vv.id_venda = v.id
                    ) as p_custo
                   
    FROM
        venda v
    WHERE
        v.id_cadastro = 23096
    AND
        v.situacao    = 'C'
    AND
        v.data_venda
    BETWEEN  '01/01/2016' AND  '31/12/2017'
)

select
    sum(qtd) as qtd,
    sum(p_venda) as p_venda,
    sum(p_desconto) as p_desconto,
    sum(p_custo) as p_custo
from CTE_Vendas


Espero que ajude


Editado pela última vez por imex em Ter Mar 07, 2023 5:26 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jan 24, 2017 7:47 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Experimente fazer uns testes dessa forma:

Código:
with CTE_Vendas as
(
    SELECT
                    ( SELECT sum(qtd)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS qtd,
                     
                    ( SELECT sum(qtd * preco_venda)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS p_venda,

                    ( SELECT sum( ( qtd * preco_tabela ) - ( qtd * preco_venda ) )
                      FROM venda_itens
                       WHERE id_venda = v.id ) AS p_desconto,
                       
                    ( SELECT SUM( vv.qtd * pp.custo)
                      FROM
                        venda_itens vv
                      INNER JOIN  produto pp ON vv.codigo_barra = pp.codigo_barra
                      WHERE pp.id_cadastro = v.id_cadastro
                      AND vv.id_venda = v.id
                    ) as p_custo
                   
    FROM
        venda v
    WHERE
        v.id_cadastro = 23096
    AND
        v.situacao    = 'C'
    AND
        v.data_venda
    BETWEEN  '01/01/2016' AND  '31/12/2017'
)

select
    sum(qtd) as qtd,
    sum(p_venda) as p_venda,
    sum(p_desconto) as p_desconto,
    sum(p_custo) as p_custo
from CTE_Vendas


Espero que ajude


Olá Imex,

Só vou poder testar amanha na empresa, mais vendo aqui fiquei numa duvida este with cte_vendas do
Vc fez um exemplo no delphi ou no banco?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Jan 25, 2017 7:58 am    Assunto: Responder com Citação

o exemplo é no banco mesmo

Citação:
Em banco de dados SQL, Common table expression (CTE) é uma alternativa a subquerys, views, e funções definidas pelo usuário.

CTE é então um conjunto nomeado e temporário de resultados, derivado de uma consulta simples e definido sob o escopo de execução de uma declaração SELECT, INSERT, UPDATE, ou DELETE.


se quiser dar uma olhada mais afundo sobre cte, de uma olhada nesse link:
http://www.macoratti.net/13/05/sql_cte1.htm
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Jan 25, 2017 8:20 am    Assunto: Responder com Citação

Interessante, fiz os testes aqui
Funciona perfeitamente no postgres

Assim com CTE
Código:
with CTE_Vendas as
(
    SELECT
                    ( SELECT sum(qtd)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS qtd,
                     
                    ( SELECT sum(qtd * preco_venda)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS p_venda,

                    ( SELECT sum( ( qtd * preco_tabela ) - ( qtd * preco_venda ) )
                      FROM venda_itens
                       WHERE id_venda = v.id ) AS p_desconto,
                       
                    ( SELECT SUM( vv.qtd * pp.custo)
                      FROM
                        venda_itens vv
                      INNER JOIN  produto pp ON vv.codigo_barra = pp.codigo_barra
                      WHERE pp.id_cadastro = v.id_cadastro
                      AND vv.id_venda = v.id
                    ) as p_custo
                   
    FROM
        venda v
    WHERE
        v.id_cadastro = 23096
    AND
        v.situacao    = 'C'
    AND
        v.data_venda
    BETWEEN  '06/01/2017' AND  '06/01/2017'
)

select
    sum(qtd) as qtd,
    sum(p_venda) as p_venda,
    sum(p_desconto) as p_desconto,
    sum(p_custo) as p_custo
from CTE_Vendas


Fiz assim também com o mesmo result
Código:
select
    sum(qtd) as qtd,
    sum(p_venda) as p_venda,
    sum(p_desconto) as p_desconto,
    sum(p_custo) as p_custo
    from (SELECT
                    ( SELECT sum(qtd)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS qtd,
                     
                    ( SELECT sum(qtd * preco_venda)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS p_venda,

                    ( SELECT sum( ( qtd * preco_tabela ) - ( qtd * preco_venda ) )
                      FROM venda_itens
                       WHERE id_venda = v.id ) AS p_desconto,
                       
                    ( SELECT SUM( vv.qtd * pp.custo)
                      FROM
                        venda_itens vv
                      INNER JOIN  produto pp ON vv.codigo_barra = pp.codigo_barra
                      WHERE pp.id_cadastro = v.id_cadastro
                      AND vv.id_venda = v.id
                    ) as p_custo
                   
    FROM
        venda v
    WHERE
        v.id_cadastro = 23096
    AND
        v.situacao    = 'C'
    AND
        v.data_venda
    BETWEEN  '06/01/2017' AND  '06/01/2017'  ) as t2


A pergunta é, tem alguma vantagem do uso de um ou de outro?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Jan 25, 2017 11:06 am    Assunto: Responder com Citação

Quando o banco de dados aceita, prefiro utilizar a sintaxe com a CTE, pois acho que fica mais fácil de analisar a query.
A vantagem da outra sintaxe talvez seja uma maior compatibilidade com outros tipos de bancos de dados.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Jan 25, 2017 12:03 pm    Assunto: Responder com Citação

imex escreveu:
Quando o banco de dados aceita, prefiro utilizar a sintaxe com a CTE, pois acho que fica mais fácil de analisar a query.
A vantagem da outra sintaxe talvez seja uma maior compatibilidade com outros tipos de bancos de dados.

Espero que ajude
Ajudou sim Imex.

Obrigado pessoal.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Jan 25, 2017 2:26 pm    Assunto: Responder com Citação

Alguém sabe me explicar porque o resultado deste sum da errado?



Notem que fiz uma soma neste campo aqui
Código:
sum( (p_venda) - (p_custo + p_desconto) ) as totalLucro


Mais o resultado não bate.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qua Jan 25, 2017 4:13 pm    Assunto: Responder com Citação

Ja resolvi eu acho
Código:

sum(p_venda) - (sum(p_custo) + sum(p_desconto)) as totalLucro


resultado final
Código:
with CTE_Vendas as
(
    SELECT
                    ( SELECT sum(qtd)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS qtd,
                     
                    ( SELECT sum(qtd * preco_venda)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS p_venda,

                    ( SELECT sum( ( qtd * preco_tabela ) - ( qtd * preco_venda ) )
                      FROM venda_itens
                       WHERE id_venda = v.id ) AS p_desconto,
                       
                    ( SELECT SUM( vv.qtd * pp.custo)
                      FROM
                        venda_itens vv
                      INNER JOIN  produto pp ON vv.codigo_barra = pp.codigo_barra
                      WHERE pp.id_cadastro = v.id_cadastro
                      AND vv.id_venda = v.id
                    ) as p_custo
                   
    FROM
        venda v
    WHERE
        v.id_cadastro = 23096
    AND
        v.situacao    = 'C'
    AND
        v.data_venda
    BETWEEN  '04/01/2017' AND  '06/01/2017'
)

select
    count(qtd) as totalpedido,
    sum(qtd) as qtd,
    sum(p_venda) as p_venda,
    sum(p_desconto) as p_desconto,
    sum(p_custo) as p_custo, 
    sum(p_venda) - (sum(p_custo) + sum(p_desconto)) as totalLucro
from CTE_Vendas

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Jan 26, 2017 12:44 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Não sei se vou conseguir ajudar, mas você quer obter somente a soma total ou o resultado normal com a soma total no final?
Imex sabe dizer se tem jeito para soma total no final também?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Jan 26, 2017 7:48 pm    Assunto: Responder com Citação

Experimente fazer uns testes dessa forma para ver se executa e se é obtido o resultado esperado:

Código:
with CTE_Vendas as
(
    SELECT
                    v.data_venda, v.hora_venda, cl.nome, v.id,
                    ( SELECT sum(qtd)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS qtd,
                     
                    ( SELECT sum(qtd * preco_venda)
                      FROM venda_itens
                      WHERE id_venda = v.id ) AS p_venda,

                    ( SELECT sum( ( qtd * preco_tabela ) - ( qtd * preco_venda ) )
                      FROM venda_itens
                       WHERE id_venda = v.id ) AS p_desconto,
                       
                    ( SELECT SUM( vv.qtd * pp.custo)
                      FROM
                        venda_itens vv
                      INNER JOIN  produto pp ON vv.codigo_barra = pp.codigo_barra
                      WHERE pp.id_cadastro = v.id_cadastro
                      AND vv.id_venda = v.id
                    ) as p_custo
                   
                FROM
                    venda v
                INNER JOIN cliente cl ON cl.id = v.id_cliente
                WHERE
                    v.id_cadastro = 23096
                AND
                    v.situacao    = 'C'
                AND
                    v.data_venda
                BETWEEN  '01/01/2016' AND  '31/12/2017'
)

select
    v.data_venda, v.hora_venda, cl.nome, v.id,
    sum(qtd) as qtd,
    sum(p_venda) as p_venda,
    sum(p_desconto) as p_desconto,
    sum(p_custo) as p_custo
from CTE_Vendas
group by grouping sets
    ( (v.data_venda, v.hora_venda, cl.nome, v.id), () )


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Jan 27, 2017 8:13 am    Assunto: Responder com Citação

Ajudou sim Imex, apenas tive que mudar aqui no ultimo select

Código:
select
    data_venda, hora_venda, nome, id,
    sum(qtd) as qtd,
    sum(p_venda) as p_venda,
    sum(p_desconto) as p_desconto,
    sum(p_custo) as p_custo
from CTE_Vendas
group by grouping sets
    ( (data_venda, hora_venda, nome, id), () )



Muito obrigado amigo.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Jan 27, 2017 8:34 am    Assunto: Responder com Citação

Passar na ultima linha no campo NOME a escrita 'Total R$' será que tem como?

Tentei aqui mais não deu certo.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página 1, 2, 3, 4  Próximo
Página 1 de 4

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB