 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Jan 23, 2017 2:04 pm Assunto: Somar um select Postgres |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jan 24, 2017 9:43 am Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jan 24, 2017 5:34 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Jan 24, 2017 7:47 pm Assunto: |
|
|
| 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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Jan 25, 2017 7:58 am Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Jan 25, 2017 8:20 am Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Jan 25, 2017 11:06 am Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Jan 25, 2017 4:13 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Jan 26, 2017 7:48 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Jan 27, 2017 8:13 am Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|