Como calcular média , máxima e mínima no postgresql

07/02/2014

0

Preciso de uma ajuda, como calcular média AVG, minima e maxima no postgresql com uma consulta dos ultimos 10 registros?

Através deste sql:

SELECT id,temperatura FROM tempexterna ORDER BY id DESC LIMIT 10

Gostaria de calcular a média dos ultimos 10 registro e mandar para uma váriavel no meu programa em Visual Studio C# para guarda-la e usar-la num gráfico.

Desde já, grato.
Fabiano Schincariol

Fabiano Schincariol

Responder

Post mais votado

07/02/2014

já tentei fazer assim mas da esse erro :

ERRO: coluna "tempexterna.id" deve aparecer na cláusula GROUP BY ou ser utilizada em uma função de agregação
LINE 1: SELECT AVG(temperatura)FROM tempexterna ORDER BY id DESC LIM...
^

********** Erro **********

ERRO: coluna "tempexterna.id" deve aparecer na cláusula GROUP BY ou ser utilizada em uma função de agregação
SQL state: 42803
Caracter: 50

Fabiano Schincariol

Fabiano Schincariol
Responder

Mais Posts

07/02/2014

Leandro Chiodini

opa



SELECT AVG(temperatura)
		,MAX(temperatura)
		,MIN(temperatura)
 FROM tempexterna ORDER BY id DESC LIMIT 10
Responder

07/02/2014

Leandro Chiodini

tira o grup by nao tem como agrupar por id,
ja que o id eh unico
Responder

07/02/2014

Fabiano Schincariol

a minha tabela é assim:

id, data, hora, temperatura

O meu software inseri no banco a cada dez minutos os dados de data hora e temperatura. Sem o id no order by não tem como ordenar as dez ultimas temperaturas.

Tirei o order by e não deu certo também

Grato
Responder

07/02/2014

Marisiana Battistella

Olá!

Vê se essa solução te ajuda...

select AVG(temp.temperatura) as mediatemp
from (select id,
temperatura
from tempexterna
order by id DESC LIMIT 10) temp


Att
Responder

10/02/2014

Fabiano Schincariol

Tentei novamente e deu esse erro:

ERRO: função avg(record, integer) não existe
LINE 1: SELECT AVG(temp,temperatura) AS mediatemp
^
HINT: Nenhuma função corresponde com o nome e os tipos de argumentos informados. Você precisa adicionar conversões de tipo explícitas.
********** Erro **********

ERRO: função avg(record, integer) não existe
SQL state: 42883
Dica: Nenhuma função corresponde com o nome e os tipos de argumentos informados. Você precisa adicionar conversões de tipo explícitas.
Caracter: 8
Responder

10/02/2014

Marisiana Battistella

Você pode ter colocado uma vírgula onde deve ir um ponto...

SELECT AVG(temp,temperatura)

Dentro do parenteses é um ponto, pois "temp" é a abreviatura do select que tá na cláusula from.
é a mesma notação de utilizar abreviaturas para as tabelas....
Responder

10/02/2014

Fabiano Schincariol

Muito obrigado Marisiana, você me ajudou muito!!!! Mas muito mesmo!!!! Continue sempre assim!!!!!
Responder

10/02/2014

Marisiana Battistella

Por nada!!
Fico feliz por ter conseguido te ajudar!
Responder

10/02/2014

Fabiano Schincariol

Como poderia estar jogando esse valor criado para uma variável dentro do meu programa em C# (Visual Studio)?

Estava entendo seu código que me passou, vocÊ criou um tabela com o nome de temp e a coluna com o nome de mediatemp, está correto o meu pensamento?

Desculpa, sou iniciante em SQL.
Responder

10/02/2014

Marisiana Battistella

Isso!! O que eu fiz foi fazer um select de outro select.
Precisei colocar o apelido "temp" para poder referenciar os campos que retornam do subselect e pegar os valores deles.
O subselect retorna apenas os últimos 10 registros de temperaturas, desses 10 registros que me retornaram calculei a média com a função AVG.

Não sei t dizer como vc fará para pegar o valor C#, porque eu não sei programar em C#.. =D
Mas vc pode utilizar o código normalmente como se vc tivesse pegando valores de uma tabela...
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar