Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

deagle30

Select com Calculo MySQL

Recommended Posts

Olá a todos!

 

Estou com uma dúvida no MySQL e na pesquisa não encontrei nenhuma luz para essa dúvida.

 

Ocorre que preciso realizar um calculo a partir de 3 colunas de uma tabela através do SELCT:

 

SELECT VALOR_1, OPERADOR_1, VALOR_2 FROM minha_tabela

 

Sendo que VALOR_1 = 10 esses valores podem variar

OPERADOR_1 = pode ser + - * ou /

VVALOR_2 = 120 esses valores podem variar

 

Se alguem tiver alguma luz para esse problema me avise.

 

Grato pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ficaria mais ou menos assim:

 

select case OPERADOR_1 when '+' then VALOR_1 + VALOR_2 when '-' then VALOR_1 - VALOR_2 when '*' then VALOR_1 * VALOR_2 when '/' then VALOR_1 / VALOR_2 end resultado from minha_tabela;

Roberto Fagundes, muito obrigado pela dica. Rodou perfeitamente.

 

Com essa orientação espero solucionar toda a problematica para essa questão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ficaria mais ou menos assim:

 

select case OPERADOR_1 when '+' then VALOR_1 + VALOR_2 when '-' then VALOR_1 - VALOR_2 when '*' then VALOR_1 * VALOR_2 when '/' then VALOR_1 / VALOR_2 end resultado from minha_tabela;

 

Roberto, devia ter mencionado no início do Post que possuo 4 colunas para operadores:

 

OPERADOR_1 = pode ser + - * ou /

OPERADOR_2 = pode ser + - * ou /

OPERADOR_3 = pode ser + - * ou /

OPERADOR_4 = pode ser + - * ou /

 

e 4 campos para valores

 

VALOR_1

VALOR_2

VALOR_3

VALOR_4

 

Essa tabela destina-se a inserir formulas pelo usuário, por exemplo:

 

100 * 12 / 10 + 100

 

Essa solução se aplica para esse exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara consegui fazer essa baderna aqui kkkk

Veja se da certo:

 

select
	case OPERADOR_3
		when '+' then
			(case OPERADOR_2
				WHEN '+' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) + VALOR_3
				WHEN '-' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) - VALOR_3
				WHEN '*' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) * VALOR_3
				WHEN '/' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) / VALOR_3
				END) + VALOR_4
		when '-' then
			(case OPERADOR_2
				WHEN '+' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) + VALOR_3
				WHEN '-' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) - VALOR_3
				WHEN '*' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) * VALOR_3
				WHEN '/' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) / VALOR_3
				END) - VALOR_4
		when '*' then
			(case OPERADOR_2
				WHEN '+' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) + VALOR_3
				WHEN '-' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) - VALOR_3
				WHEN '*' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) * VALOR_3
				WHEN '/' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) / VALOR_3
				END) * VALOR_4
		when '/' then
			(case OPERADOR_2
				WHEN '+' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) + VALOR_3
				WHEN '-' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) - VALOR_3
				WHEN '*' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) * VALOR_3
				WHEN '/' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) / VALOR_3
				END) / VALOR_4
	END RESULT
FROM minha_tabela;

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Cara consegui fazer essa baderna aqui kkkk

Veja se da certo:

 

select
	case OPERADOR_3
		when '+' then
			(case OPERADOR_2
				WHEN '+' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) + VALOR_3
				WHEN '-' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) - VALOR_3
				WHEN '*' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) * VALOR_3
				WHEN '/' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) / VALOR_3
				END) + VALOR_4
		when '-' then
			(case OPERADOR_2
				WHEN '+' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) + VALOR_3
				WHEN '-' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) - VALOR_3
				WHEN '*' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) * VALOR_3
				WHEN '/' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) / VALOR_3
				END) - VALOR_4
		when '*' then
			(case OPERADOR_2
				WHEN '+' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) + VALOR_3
				WHEN '-' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) - VALOR_3
				WHEN '*' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) * VALOR_3
				WHEN '/' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) / VALOR_3
				END) * VALOR_4
		when '/' then
			(case OPERADOR_2
				WHEN '+' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) + VALOR_3
				WHEN '-' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) - VALOR_3
				WHEN '*' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) * VALOR_3
				WHEN '/' THEN
					(case OPERADOR_1
						WHEN '+' THEN VALOR_1 + VALOR_2
						WHEN '-' THEN VALOR_1 - VALOR_2
						WHEN '*' THEN VALOR_1 * VALOR_2
						WHEN '/' THEN VALOR_1 / VALOR_2
					end) / VALOR_3
				END) / VALOR_4
	END RESULT
FROM minha_tabela;

Bom dia! preciso na verdade que o usuário abasteça essa tabela com as equações pertinetes a certos indicadores. Por exemplo:

 

Valor Apple = 300 / 3 * 120

 

O fato é que preciso que esse resultado seja gerado via SELECT no MySQL, só que os operadores da equação podem ser variados, de acordo com a necessidade do cliente.

 

Por isso imaginei criar uma coluna para cada valor e operador.

 

Nesse caso felizmente existe uma limitação sim, e esta em 4 valores para até 3 operadores. O MySQL não reconhece um SELECT para os valores e os operadores empregados.

 

Ex: SELECT valor_1 operador_1 valor_2 FROM My_tabela - nesse caso ele deve reconhecer o operador inserido na coluna.

 

normalmente o MySQL aceita somente assim: SELECT valor_1 * valor_2 FROM My_tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu criei uma tabela parecida com a sua e executei esse select e ele me trouxe o resultado certinho...

segue a tabela:

 

 

CREATE TABLE IF NOT EXISTS `indicador_cadastro` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`area` varchar(500) DEFAULT NULL,
`processo` varchar(500) DEFAULT NULL,
`categoria` varchar(500) DEFAULT NULL,
`nome` varchar(500) DEFAULT NULL,
`unidade` varchar(200) DEFAULT NULL,
`objetivo` varchar(200) DEFAULT NULL,
`coleta` varchar(250) DEFAULT NULL,
`responsavel` varchar(250) DEFAULT NULL,
`coleta_periodo` varchar(250) DEFAULT NULL,
`coleta_data_inicio` date DEFAULT NULL,
`coleta_data_final` date DEFAULT NULL,
`responsavel_analise` varchar(250) DEFAULT NULL,
`meta_inicial` varchar(250) DEFAULT NULL,
`analise` varchar(250) DEFAULT NULL,
`observacao` longtext,
`indicador_1` varchar(250) DEFAULT NULL,
`operador_1` varchar(250) DEFAULT NULL,
`valor_1` tinyint(4) DEFAULT NULL,
`indicador_2` varchar(250) DEFAULT NULL,
`operador_2` varchar(250) DEFAULT NULL,
`valor_2` tinyint(4) DEFAULT NULL,
`indicador_3` varchar(250) DEFAULT NULL,
`operador_3` varchar(250) DEFAULT NULL,
`valor_3` tinyint(4) DEFAULT NULL,
`indicador_4` varchar(250) DEFAULT NULL,
`operador_4` varchar(250) DEFAULT NULL,
`valor_4` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=27 ;
--
-- Extraindo dados da tabela `indicador_cadastro`
--
INSERT INTO `indicador_cadastro` (`id`, `area`, `processo`, `categoria`, `nome`, `unidade`, `objetivo`, `coleta`, `responsavel`, `coleta_periodo`, `coleta_data_inicio`, `coleta_data_final`, `responsavel_analise`, `meta_inicial`, `analise`, `observacao`, `indicador_1`, `operador_1`, `valor_1`, `indicador_2`, `operador_2`, `valor_2`, `indicador_3`, `operador_3`, `valor_3`, `indicador_4`, `operador_4`, `valor_4`) VALUES
(26, '', NULL, NULL, '', '', '', '', '', '', '0000-00-00', '0000-00-00', '', '', '', '', 'Indicador 1', '+', 100, 'indicador 2', '*', 15, 'indicador 3', '/', 10, '', '', 0);
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu executei aqui, e funcionou de forma dinâmica...

Roberto, fiz aqui e funcionou perfeitamente...rs Cara, sinistro seu SELECT... Valeu mesmo pela ajuda! você é de onde?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.