Notifications
Clear all

Calcular Média de Campos em colunas diferentes

7 Posts
2 Usuários
0 Reactions
1,893 Visualizações
(@dreansb)
Posts: 0
New Member
Topic starter
 

Olá pessoal,

preciso da sintaxe correta para calcular a média de valores que estão em colunas diferentes no Access.

consigo calcular a média dos valores contidos em uma mesma coluna da seguinte forma:
Set MinhaTabela = MeuBD.OpenRecordset("SELECT superior, AVG(Valor1) AS MédiaValor FROM [dados2$] )

só que preciso algo assim:
Set MinhaTabela = MeuBD.OpenRecordset("SELECT superior, AVG(Valor1,Valor2,Valor3) AS MédiaValor FROM [dados2$] WHERE superior = "S" )
onde Valor1,Valor2,Valor3 estão em colunas diferentes.

Tem como?
Desde já agradeço.

 
Postado : 08/07/2015 7:33 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não entendi seria média da soma dos vários campos?

ou seria: SELECT... Avg(Valor1) AS Expr1, Avg(Valor2) AS Expr2, Avg(Valor3) AS Expr3

 
Postado : 08/07/2015 8:37 am
(@dreansb)
Posts: 0
New Member
Topic starter
 

Seria a média dos valores de 3 colunas diferentes da mesma linha (ou mesmo registro)
ou como vc disse: seria média da soma dos vários campos.

 
Postado : 08/07/2015 8:47 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Creio que nessa situação a média deva ser "calculala" algo do tipo
SELECT superior, Avg(Valor1) AS MValor1, Avg(Valor2) AS MValor2, Avg(Valor3) AS MValor3, MVendas.Ano, ([Valor1]+[Valor2]+[Valor3])/3 AS MSoma
FROM [dados2$]
HAVING ((([dados2$])="2013"));

 
Postado : 08/07/2015 12:34 pm
(@dreansb)
Posts: 0
New Member
Topic starter
 

Reinaldo, já tentei algo parecido mas, alguns campos podem estar vazios (ou nulos) e, desta forma eu não posso somar e dividir por 3.
o que preciso é da média entre os 3 valores desde que sejam > 0

 
Postado : 08/07/2015 12:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Uma possibilidade
....([Valor1]+[Valor2]+[Valor3])/IIf([Valor1]>0,1,0)+IIf([Valor2]>0,1,0)+IIf([Valor3]>0,1,0) AS MSoma

 
Postado : 08/07/2015 1:33 pm
(@dreansb)
Posts: 0
New Member
Topic starter
 

bom dia...

...quase isso...
fazendo alguns ajustes...
do modo com vc indicou, quando um dos valores era nulo ele trazia o todo o resultado como nulo (ou vazio), então tive que tratar esta questão seguindo sua lógica e adicionado alguns parênteses, aí funcionou:
...((IIf(Valor1>0,Valor1,0)+IIf(Valor2>0,Valor2,0)+IIf(Valor3>0,Valor3,0))/(IIf(Valor1>0,1,0)+IIf(Valor2>0,1,0)+IIf(Valor3>0,1,0))) AS MSoma

detalhe: com ou sem os colchetes funciona da mesma forma.

Obrigado Reinaldo.

 
Postado : 09/07/2015 5:02 am