2014-11-20 1 views
0

Я экспериментирую со следующим запросом, чтобы получить строки на основе времени. Когда я получаю строки, я хочу усреднять значения в столбце и возвращать одну строку со средним значением как JSON. Надеюсь, это будет иметь смысл с некоторым кодом. Вот запрос PostgreSQL Я начиная с:PostgreSQL: получение среднего значения для строк, соответствующих столбцу

select row_to_json(row) 
    from (
    SELECT "responses"."index", "responses"."created_at", 
    ROUND(AVG("responses"."value")) AS value 
    FROM "responses" 
    WHERE "responses"."time" = '1416177080' 
    GROUP BY "responses"."index", "responses"."created_at" 
) row 

Это производит вывод так:

{"index":4,"created_at":"2014-11-16 22:31:27","value":5} 
{"index":4,"created_at":"2014-11-16 22:31:23","value":-5} 
{"index":4,"created_at":"2014-11-16 22:31:24","value":0} 
{"index":4,"created_at":"2014-11-16 22:31:25","value":-1} 
{"index":4,"created_at":"2014-11-16 22:31:26","value":1} 
(5 rows) 

Когда то, что я действительно хочу это только один ряд со средним в качестве значения. Как это:

{"index_of_affiliation":4,"created_at":"2014-11-16 22:31:27","value":0} 

Я чувствую, что created_at может бросить меня, но я хотел бы вернуть значение для этого в формате JSON. Любая обратная связь о том, как я могу получить желаемую одну строку с усредненным значением, будет полезна.

ответ

1

Что-то вроде этих линий может работать.

select row_to_json(row) 
from (select "index" index_of_affiliation, 
      max("created_at") max_created_at, 
      round(avg("value")) avg_value 
     from responses 
     where "time" = '1416177080' 
     group by "index" 
    ) row ; 

В конечном счете, вы лучше с более описательные имена, чем «индекс», «значение» и «время».

+0

Как очарование. Благодаря! – tvalent2

Смежные вопросы