Página 1 de 1

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 10:16
por alexlucc
Olá amigos, bom dia !

Preciso de uma Query em mysql que faça o seguinte: Somar todas as vendas de cliente em determinado período agrupando por cliente e verificar se essa soma está entro do intervalo de valores da tabela de premiação.


1) Tabela Vendas(campos)

- Número da venda
- Data da Venda
- Codigo do cliente
- Valor da Venda

Registros:

Num.Venda Data Cod.Cliente Valor
00001 02/07/2022 1 R$ 12,50
00002 03/07/2022 1 R$ 50,00
00003 03/07/2022 1 R$ 20,00
00004 04/07/2022 2 R$ 20,00
00005 04/07/2022 2 R$ 25,00
00006 04/07/2022 2 R$ 5,50
00007 04/07/2022 3 R$ 32,00
00008 04/07/2022 4 R$ 8,00


1) Tabela Premios(campos)

- Código
- Nome
- Valor

Codigo Nome Valor
00001 Batedeira de Bolo R$ 32,00
00002 Cafeteira R$ 40,00
00003 Jogo de Copos R$ 45,00
00004 Bicicleta R$ 300,00


1) Tabela Cliente(campos)

- Código
- Nome

Codigo Nome
1 Joao Feritas
2 Alex Santana
3 Marcos souza
4 Souza de Melo

========>>>> O resultado da query deverá ser

Codigo cliente Nome Valor de Vendas

1 João Freitas R$ 82,50
2 Alex Santana R$ 45,00
3 Marcos Souza R$ 32,00

Obvserve que Soza melo não entrou pq o somatório das suas vendas não correspondem ao intervalo de valor da premiação que varia de R$ 32,00 a R$ 300,00.


Desde já agradeço a todos.

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 12:53
por JoséQuintas
Somar vendas por cliente em um período.....

Código: Selecionar todos

SELECT SUM( VALOR ) AS SOMA, CODIGO 
FROM VENDAS WHERE DATE( DATVEN ) BETWEEN DATE( '2022/01/01' ) AND DATE( '2022/01/31' )
GROUP BY CODIGO
pra sair o nome:

Código: Selecionar todos

SELECT ..., CLIENTE.NOME
INNER JOIN CLIENTES ON VENDAS.CODIGO = CLIENTE.CODIGO
o prêmio, depende se vai passar a lista pra trazer pronto ou se vai pegar de outra tabela.
E também se tem direito aos prêmios de valor menor, ou somente um deles.

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 13:06
por JoséQuintas
Se forem todos, mais fácil.

Código: Selecionar todos

SELECT SUM( VALOR ) AS SOMA, CODIGO, ..., TABPREMIO.IDPREMIO, TABPREMIO.VALPREMIO
LEFT JOIN TABELAPREMIOS ON SUM( VALOR ) > VALORPREMIO
GROUP BY CODIGO
HAVING IDPREMIO != 0
Nota: no anterior esqueci do GROUP BY, acrescentei depois.

Se for prêmio único, aí eu criaria uma tabela temporária com o resultado anterior pra poder processar, ou uma STORED PROCEDURE fazendo a mesma coisa.
o ValPremio na query é justamente pra pegar o maior depois.

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 13:10
por alexlucc
Boa tarde Quintas meu amigo !!

No Caso seria mostrar a lista de clientes que durante o mês acumularam soma de vendas que estivesse dentro da faixa de valores das premiações.

Exemplo se um cliente vendeu no mês R$ 31,00 ele não sai na listagem já que o Valor mínimo de prêmio é R$ R$ 32,00.


Abraço.

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 13:14
por JoséQuintas
Não lembro a sintaxe, mas acho que é WHERE EXISTS, pra testar se encontrou na lista

Mas pensei na opçào de trazer pronto, com o prêmio do lado, usando uma query com sub-query.
Usar um MAX() na tabela de prêmios, e no outro SELECT trazer a descriçào conforme valor do prêmio.

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 13:16
por JoséQuintas
Pra saber se tem prêmio mais fácil ainda.

Código: Selecionar todos

SET VALMINIMO := ( SELECT MIN( VALPREMIO ) FROM TABELAPREMIOS )
SELECT .... WHERE SUM( VENDAS ) > VALMINIMO

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 13:29
por alexlucc
Obrigado Quintas !!

Vou fazer alguns testes lá e posto aqui o resultado.

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 14:01
por alexlucc
SET @VALMINIMO = ( SELECT MIN(pontos) FROM premios ) ;
SELECT ve.codcli AS Codcliente,ve.totger AS Soma FROM vendas ve
WHERE sum(ve.totger) > @VALMINIMO
GROUP BY Codcliente


o sum após where ele dá mnsagem "invalid function".

Query par somar total de vendas e faixa de premiação.

Enviado: 03 Jul 2022 16:15
por JoséQuintas
Viajei na maionese.
soma.png
soma.png (9.22 KiB) Exibido 4558 vezes

Query par somar total de vendas e faixa de premiação.

Enviado: 06 Jul 2022 10:50
por alexlucc
Bom dia amigo Quintas


Ficou show de bola, consegui fazer usando o having.

Muito Obriagado amigo. Agora to fazendo uma para curva abc, mais to com dificuldade de somar os percentuais para depois fazer a classificação "A","B" OU "C".
Vou abri um novo tópico já o que tenho iniciado.


Segue abaixo:


SET @VALMINIMO = ( SELECT MIN(pontos) FROM premios WHERE pontos > 0 ) ; # depois de sorteado zerar o premio

SELECT ve.codcli AS Codcliente,cli.nomcli AS Nome_Cliente,cli.foncli AS Telefone,cli.celcli AS Celular, sum(ve.totger) AS Valor_Vendas FROM vendas ve
INNER JOIN cliente cli ON cli.codcli = ve.codcli
WHERE ve.dtemi BETWEEN '2022-05-01' AND '2022-06-30' AND ve.cancelado = 0 AND ve.tipoimpor <> 04 and ve.codcli > 0
GROUP BY Codcliente
HAVING valor_vendas >= @VALMINIMO
ORDER BY valor_vendas desc