Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma consulta entre várias tabelas, e 2 das clausulas é soma.
Essa funciona
SUM(t3.valor_servico*t3.quantidade)...
Com essa junta não.
SUM(CASE WHEN tab1.codigo = tab2.codigo THEN tab2.valor END) AS valor_pago
Tentei fazer igual a de cima mas não rolou, então li a respeito do CASE, e tentei isso acima.
Ocorre que o sistema tem opção de efetuar vários pagamentos em datas diferentes até que o valor total seja quitado.
No caso, tenho uma tabela para armazenar o valor pago(valor), quem pagou (codigo) entre outras coisas, denominada como tab2 e a tab1 com outras informações, e o codigo.
Não sei se é possível, mas estou precisando que esses 2 SUM estejam na mesma consulta porque fiz a condição acima sozinha para teste e funciona, então não faço ideia do que ocorre.
o sql inteiro é esse, e preciso somar a quantidade paga de cada ticket.
$sql = mysqli_query($conexao, "SELECT *, SUM(st.valor_servico*st.quantidade) AS soma_servico FROM ticket t JOIN clientes c ON t.id_cliente = c.id_cliente JOIN servico_ticket st ON t.id_ticket = st.id_ticket JOIN status sts ON sts.id_status = t.status JOIN usuarios us ON us.id_user = t.atendente JOIN pagamento_ticket pgt WHERE t.id_loja ".$condLoja." AND ".$acao_status." GROUP BY t.id_ticket")or die (mysqli_error());
Obrigado.Sim preciso,
É uma listagem diária de serviços que exibe o valor do mesmo e o quanto foi pago, ( para agilizar o atendimento e evitar ter que abrir a ordem de serviço para ver).
Coloquei o Join porque não sei de outra forma de fazer a consulta de outra tabela sem ter que fazer um sql secundário para isso, quero que fique o mais rápido e prático possível .
Solucões que eu faço nestes casos
1 um subselect do pago como tabela virtual e o join em cima fisto
2 uma function retornando o valor pago
mantive uma function (sql secundário) para calcular o valor pago, subselect iria complicar demais.
Como estou refazendo, estou procurando formas de enxugar o código e deixa-lo com melhor desempenho possível, e queria evitar essas consultas a parte, porque está cheio disso, exemplo:
SUM(st.valor_servico*st.quantidade)
isso acima já era uma function da forma que você sugeriu, mas consegui coloca-la na mesma sql, só não estou entendendo porque não estou conseguindo fazer a mesma coisa com o valor_pago.
Mas obrigado
Aliás, o que traz melhor desempenho?
SUM(st.valor_servico*st.quantidade)
Isso dentro da mesma sql como está ou uma function que será acionada a cada linha de resultado?
A function depende muito do select contido nela , se usa índice etc.
Muitos profissionais são contra function.Descobri o erro!
Faltava inserir o LEFT JOIN, eu estava usando apenas JOIN, aí não exibia todos os registros somente aqueles que continham dados em todas as tabelas.
vlw
Você precisa do Valor Pago !? Para que o join nele !?