Inserir resultado de calculo em uma tabela
Pessoal,sou novo nesse mundo de banco de dados mas tem três semanas estudado muito principalmente mysql,estou fazendo um mini projeto para melhorar meus conhecimentos e tem dado bastante certo,porém esbarrei num ponto onde acho que minha falta de conhecimento esta me prejudicando.
Vamos ao projeto ,Preciso verificar o volume de vendas dos produtos o parâmetro que estou usando é a faixa de preço deles.
Faixas de preços estas "00.01 até 05.00" "05.01 até 10.00" "10.01 até 15.00" "15.01 até 20.00"
Para isso consegui criar a seguinte Querie
DROP TABLE IF EXISTS Consulta2;
CREATE TABLE rep.consulta2 (
`Faixa Preco` VARCHAR(255) NOT NULL DEFAULT '',
JulhoValor VARCHAR(255) DEFAULT NULL,
Julhoperc VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`Faixa Preco`)
)
ENGINE = INNODB
AVG_ROW_LENGTH = 4096
CHARACTER SET utf8
COLLATE utf8_general_ci;
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixa05",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '00.01' and prvenda <= '05.00'));
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixa10",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '05.01' and prvenda <= '10.00'));
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixa15",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '10.01' and prvenda <= '15.00'));
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixa20",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '15.01' and prvenda <= '20.00'));
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixatotal",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '00.01' ));
Que me deu o seguinte resultado
[img]http://arquivo.devmedia.com.br/forum/imagem/446449-20150808-231413.jpg[/img]
Agora vamos ao meu problema ,Não estou conseguinto inserir os valores na colunho " Julhoperc" que seria a coluna com o valor em percentual
Para conseguir calcular executei os seguintes comandos
UPDATE consulta2 SET JulhoValor=REPLACE(JulhoValor,'.',',') < Para substituir os pontos por virgulas
Consegui criar a querie que calcula o percentual
(Select (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixa05') / (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixatotal') * 100 )
Que retornou o seguinte resultado
[img]http://arquivo.devmedia.com.br/forum/imagem/446449-20150808-232236.jpg[/img]
Pronto isso é exatamente oq eu queria
Agora preciso inserir esse resultado na coluna "Julhoperc" onde " Faixa Preco" for Faixa05 porém todas minhas tentativas falharam
Tentei essa Querie com INSERT
INSERT INTO consulta2(Julhoperc)
SELECT (Select (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixa05') / (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixatotal') * 100 )
FROM Consulta2
WHERE 'faixa preco' = 'faixa05'
Tentei essa Querie com Update
UPDATE consulta2 set julhoperc = (Select (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixa05') / (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixatotal') * 100 ) faixa05 where faixapreco = faixa05
Por ultimo tentei uma querie sem indicar onde queria que o resultado do select ficasse,foi a Querie com o resultado mais próximo do que eu quero
[img]http://arquivo.devmedia.com.br/forum/imagem/446449-20150808-234827.jpg[/img]
Estou perdido estou pensando em fazer outra tabela e usar ela como referencia,mas acredito que dê para fazer nessa mesma
Quem puder me ajudar,estou usando ferramentas simples para isso e meu conhecimento ainda é muito limitado ,mas aprendo rápido...
Vamos ao projeto ,Preciso verificar o volume de vendas dos produtos o parâmetro que estou usando é a faixa de preço deles.
Faixas de preços estas "00.01 até 05.00" "05.01 até 10.00" "10.01 até 15.00" "15.01 até 20.00"
Para isso consegui criar a seguinte Querie
DROP TABLE IF EXISTS Consulta2;
CREATE TABLE rep.consulta2 (
`Faixa Preco` VARCHAR(255) NOT NULL DEFAULT '',
JulhoValor VARCHAR(255) DEFAULT NULL,
Julhoperc VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`Faixa Preco`)
)
ENGINE = INNODB
AVG_ROW_LENGTH = 4096
CHARACTER SET utf8
COLLATE utf8_general_ci;
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixa05",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '00.01' and prvenda <= '05.00'));
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixa10",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '05.01' and prvenda <= '10.00'));
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixa15",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '10.01' and prvenda <= '15.00'));
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixa20",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '15.01' and prvenda <= '20.00'));
INSERT INTO consulta2(`Faixa Preco`,JulhoValor) Values ("faixatotal",(SELECT
SUM(pedidos.prvenda)
FROM pedidos
WHERE pedidos.dteminf BETWEEN '2013-06-01' AND '2013-06-30'
AND pedidos.prvenda >= '00.01' ));
Que me deu o seguinte resultado
[img]http://arquivo.devmedia.com.br/forum/imagem/446449-20150808-231413.jpg[/img]
Agora vamos ao meu problema ,Não estou conseguinto inserir os valores na colunho " Julhoperc" que seria a coluna com o valor em percentual
Para conseguir calcular executei os seguintes comandos
UPDATE consulta2 SET JulhoValor=REPLACE(JulhoValor,'.',',') < Para substituir os pontos por virgulas
Consegui criar a querie que calcula o percentual
(Select (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixa05') / (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixatotal') * 100 )
Que retornou o seguinte resultado
[img]http://arquivo.devmedia.com.br/forum/imagem/446449-20150808-232236.jpg[/img]
Pronto isso é exatamente oq eu queria
Agora preciso inserir esse resultado na coluna "Julhoperc" onde " Faixa Preco" for Faixa05 porém todas minhas tentativas falharam
Tentei essa Querie com INSERT
INSERT INTO consulta2(Julhoperc)
SELECT (Select (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixa05') / (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixatotal') * 100 )
FROM Consulta2
WHERE 'faixa preco' = 'faixa05'
Tentei essa Querie com Update
UPDATE consulta2 set julhoperc = (Select (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixa05') / (Select JulhoValor FROM consulta2 WHERE `Faixa Preco` = 'faixatotal') * 100 ) faixa05 where faixapreco = faixa05
Por ultimo tentei uma querie sem indicar onde queria que o resultado do select ficasse,foi a Querie com o resultado mais próximo do que eu quero
[img]http://arquivo.devmedia.com.br/forum/imagem/446449-20150808-234827.jpg[/img]
Estou perdido estou pensando em fazer outra tabela e usar ela como referencia,mas acredito que dê para fazer nessa mesma
Quem puder me ajudar,estou usando ferramentas simples para isso e meu conhecimento ainda é muito limitado ,mas aprendo rápido...
Rodolfo
Curtidas 0
Respostas
William
08/08/2015
Colega Rodolfo, antes de postar a provável solução do seu problema vou passar algumas dicas para você:
1 - Por gentileza sempre que for postar trechos de código utilize a tag CODE, deixa o código mais legível.
[img]http://arquivo.devmedia.com.br/forum/imagem/269142-20150809-102815.png[/img]
2 - Padronize sua nomenclatura, veja a diferença no nome da tabela (Maiúsculo e Minúsculo), estude sobre padrões de nomenclatura Pascal Case e Camel Case.
3 - Não crie campos com espaço, utilize underscore "_" para separar palavras:
4 - Campos que recebem valores quer seja monetário ou porcentagem utilize o data type DECIMAL.
Agora vamos a provável solução do seu problema, o MySQL é um SGBD sensacional e possui algumas regras para UPDATE quando envolvemos a mesma tabela na subquery. A ideia é na subquery criar um resultset "temporário" para que o MySQL deixe atualizar a tabela que está sendo informada no UPDATE.
Veja se ajuda, qualquer coisa poste novamente!
1 - Por gentileza sempre que for postar trechos de código utilize a tag CODE, deixa o código mais legível.
[img]http://arquivo.devmedia.com.br/forum/imagem/269142-20150809-102815.png[/img]
2 - Padronize sua nomenclatura, veja a diferença no nome da tabela (Maiúsculo e Minúsculo), estude sobre padrões de nomenclatura Pascal Case e Camel Case.
DROP TABLE IF EXISTS Consulta2; CREATE TABLE rep.consulta2
3 - Não crie campos com espaço, utilize underscore "_" para separar palavras:
`Faixa Preco` VARCHAR(255) NOT NULL DEFAULT '',
4 - Campos que recebem valores quer seja monetário ou porcentagem utilize o data type DECIMAL.
JulhoValor VARCHAR(255) DEFAULT NULL,
Agora vamos a provável solução do seu problema, o MySQL é um SGBD sensacional e possui algumas regras para UPDATE quando envolvemos a mesma tabela na subquery. A ideia é na subquery criar um resultset "temporário" para que o MySQL deixe atualizar a tabela que está sendo informada no UPDATE.
UPDATE consulta2 SET julhoperc = (JulhoValor / (SELECT JulhoValor FROM (SELECT JulhoValor FROM consulta2 WHERE FaixaPreco = 'faixatotal' LIMIT 1) AS temp)) * 100;
Veja se ajuda, qualquer coisa poste novamente!
GOSTEI 0
Rodolfo
08/08/2015
Willian muito obrigado pela sua explicações ,fiz todas as alterações que vc citou... e sua queria funcionou perfeitamente.Além do que eu pensava...achei que teria que fazer 5 linhas de update porém,agora estou muito curioso sobre as funções que vc usou nessa query e como eu poderia fazer ela .
Outra coisa,tentei implementar esse update na minha query inicial porém,ele dá erro ...
Error (48,1): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE consulta2 SET julhoperc = (julhovalor / (SELECT julhovalor FROM (SELECT j' at line 4
mas quando eu executo ele individualmente ele funciona,sabe me dizer o está acontecendo
Mais uma vez muito obrigado pela sua ajuda vc conseguiu compreender exatamente onde eu queria chegar.
Outra coisa,tentei implementar esse update na minha query inicial porém,ele dá erro ...
Error (48,1): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE consulta2 SET julhoperc = (julhovalor / (SELECT julhovalor FROM (SELECT j' at line 4
mas quando eu executo ele individualmente ele funciona,sabe me dizer o está acontecendo
Mais uma vez muito obrigado pela sua ajuda vc conseguiu compreender exatamente onde eu queria chegar.
GOSTEI 0
William
08/08/2015
Se você está tentando executar individualmente por registro tente colocar uma condição WHERE no UPDATE, informando o ID do registro que pretende atualizar.
GOSTEI 0