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

Forum sobre SQL.

Moderador: Moderadores

alexlucc
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 13 Nov 2016 19:19
Localização: Nova Iguaçu /rj

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

Mensagem 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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alexlucc
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 13 Nov 2016 19:19
Localização: Nova Iguaçu /rj

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

Mensagem 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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alexlucc
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 13 Nov 2016 19:19
Localização: Nova Iguaçu /rj

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

Mensagem por alexlucc »

Obrigado Quintas !!

Vou fazer alguns testes lá e posto aqui o resultado.
alexlucc
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 13 Nov 2016 19:19
Localização: Nova Iguaçu /rj

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

Mensagem 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".
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem por JoséQuintas »

Viajei na maionese.
soma.png
soma.png (9.22 KiB) Exibido 4557 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alexlucc
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 13 Nov 2016 19:19
Localização: Nova Iguaçu /rj

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

Mensagem 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
Responder