1

我有以下 Postgres 查询:

"SELECT \"responses\".\"index\", \"responses\".\"created_at\",
ROUND(AVG(\"responses\".\"numeric\")) AS numeric
FROM \"responses\"
WHERE \"responses\".\"time\" = '#{time}'
GROUP BY \"responses\".\"index\", \"responses\".\"created_at\""

我正在尝试使用 json 将响应输出为row_to_json. 我可以用:

"select row_to_json(row)
from (
  SELECT \"responses\".\"index\", \"responses\".\"created_at\",
  ROUND(AVG(\"responses\".\"numeric\")) AS numeric
  FROM \"responses\"
  WHERE \"responses\".\"time\" = '#{time}'
  GROUP BY \"responses\".\"index\", \"responses\".\"created_at\"
) row"

这会给我:

{"row_to_json"=>"{\"index\":1,\"created_at\":\"2014-07-12 03:51:00\",\"numeric\":3}"}

但是我真的不希望响应嵌套在row_to_json哈希中。有没有一种简单的方法可以删除它,所以我只返回:

"{\"index\":1,\"created_at\":\"2014-07-12 03:51:00\",\"numeric\":3}"
4

1 回答 1

1

你应该使用array_to_jsonarray_agg函数。

例如:

SELECT array_to_json(array_agg(row_to_json(row))) FROM ...

它将返回一个正确的 JSON 数组

参考:

于 2014-10-16T20:45:19.547 回答