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 

Dúvida SQL (MYSQL) com totais e porcentagem

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qua Fev 28, 2018 3:12 pm    Assunto: Dúvida SQL (MYSQL) com totais e porcentagem Responder com Citação

Pessoal. boa tarde, estou com uma dúvida aqui e gostaria da ajuda de vcs.

Tenho um banco de dados de pagamentos e queria fazer uma sql mostrando o total de cada tipo de pagamento junto com a porcentagem sobre o total, ex:

tabela tipopagamento
COD, NOME

tabela pagamentos
COD, CODPAG, VALOR

na sql final gostaria que mostrasse da seguinte forma (exemplo):

tive as seguintes vendas

DINHEIRO - 500,00
DINHEIRO - 200,00
DINHEIRO - 100,00
CARTAO CREDITO - 800,00
CARTAO CREDITO - 600,00
CARTAO DEBITO - 600,00
CARTAO DEBITO - 400,00
CARTAO DEBITO - 100,00

o resultado seria esse:

DINHEIRO - 800,00 - 24,24%
CARTAO CREDITO - 1.400,00 - 42,42%
CARTAO DEBITO - 1.100,00 - 33,33%

Uso MySQL versão 5.7
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Qua Fev 28, 2018 4:07 pm    Assunto: Responder com Citação

este exemplo pode ficar lento, mas resolve por enqto:

Código:
SELECT d.id_documentos,
  d.descricao,
  SUM(r.valor) AS total,
  ROUND(SUM(r.valor) / (SELECT SUM(valor) FROM receber) * 100, 1)  AS percentual
FROM documentos d
LEFT JOIN receber r ON r.id_documentos = d.id_documentos
GROUP BY d.id_documentos, d.descricao

_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
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 Fev 28, 2018 4:09 pm    Assunto: Responder com Citação

Boa tarde,

Não tenho nenhuma experiência com o MySQL mas experimente fazer uns testes mais ou menos dessa forma:

Código:
select
    t.Nome,
    sum(p.Valor) as Valor,
    sum(p.Valor) / c.Total * 100 as Percentual
from TipoPagamento as t
inner join Pagamentos as p
    on p.CodPag = t.Cod
cross join
(
    select
        sum(Valor) as Total
    from Pagamentos
) as c
group by
    t.Nome


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos!cumbica-comercial_ou_industrial-galpão
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qua Fev 28, 2018 6:23 pm    Assunto: Responder com Citação

Mais uma vez me salvando, vc é o cara....

imex escreveu:
Boa tarde,

Não tenho nenhuma experiência com o MySQL mas experimente fazer uns testes mais ou menos dessa forma:

Código:
select
    t.Nome,
    sum(p.Valor) as Valor,
    sum(p.Valor) / c.Total * 100 as Percentual
from TipoPagamento as t
inner join Pagamentos as p
    on p.CodPag = t.Cod
cross join
(
    select
        sum(Valor) as Total
    from Pagamentos
) as c
group by
    t.Nome


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos!cumbica-comercial_ou_industrial-galpão
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qua Fev 28, 2018 6:28 pm    Assunto: Responder com Citação

muito obrigado meu amigo....

joemil escreveu:
este exemplo pode ficar lento, mas resolve por enqto:

Código:
SELECT d.id_documentos,
  d.descricao,
  SUM(r.valor) AS total,
  ROUND(SUM(r.valor) / (SELECT SUM(valor) FROM receber) * 100, 1)  AS percentual
FROM documentos d
LEFT JOIN receber r ON r.id_documentos = d.id_documentos
GROUP BY d.id_documentos, d.descricao
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
Página 1 de 1

 
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