Clipper On Line • Ver Tópico - Query par somar total de vendas e faixa de premiação.

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

Discussão sobre SQL

Moderador: Moderadores

 

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

Mensagempor alexlucc » 03 Jul 2022 10:16

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.
alexlucc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 49
Data de registro: 13 Nov 2016 18:19
Cidade/Estado: Nova Iguaçu /rj
Curtiu: 4 vezes
Mens.Curtidas: 2 vezes

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

Mensagempor JoséQuintas » 03 Jul 2022 12:53

Somar vendas por cliente em um período.....

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:
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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

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

Mensagempor JoséQuintas » 03 Jul 2022 13:06

Se forem todos, mais fácil.

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

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

Mensagempor alexlucc » 03 Jul 2022 13:10

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.
alexlucc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 49
Data de registro: 13 Nov 2016 18:19
Cidade/Estado: Nova Iguaçu /rj
Curtiu: 4 vezes
Mens.Curtidas: 2 vezes

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

Mensagempor JoséQuintas » 03 Jul 2022 13:14

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

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

Mensagempor JoséQuintas » 03 Jul 2022 13:16

Pra saber se tem prêmio mais fácil ainda.
SET VALMINIMO := ( SELECT MIN( VALPREMIO ) FROM TABELAPREMIOS )
SELECT .... WHERE SUM( VENDAS ) > VALMINIMO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

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

Mensagempor alexlucc » 03 Jul 2022 13:29

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
Data de registro: 13 Nov 2016 18:19
Cidade/Estado: Nova Iguaçu /rj
Curtiu: 4 vezes
Mens.Curtidas: 2 vezes

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

Mensagempor alexlucc » 03 Jul 2022 14:01

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".
alexlucc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 49
Data de registro: 13 Nov 2016 18:19
Cidade/Estado: Nova Iguaçu /rj
Curtiu: 4 vezes
Mens.Curtidas: 2 vezes

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

Mensagempor JoséQuintas » 03 Jul 2022 16:15

Viajei na maionese.

soma.png
soma.png (9.22 KiB) Visualizado 652 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

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

Mensagempor alexlucc » 06 Jul 2022 10:50

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
alexlucc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 49
Data de registro: 13 Nov 2016 18:19
Cidade/Estado: Nova Iguaçu /rj
Curtiu: 4 vezes
Mens.Curtidas: 2 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro