我想计算 Postgres 中多个 (json) 数组的平均值。
我有下表:
CREATE TABLE marks (student varchar(48), year int , testresult json);
INSERT INTO marks
VALUES ('John',2017,'[7.3,8.1,9.2]'),
('Mary', 2017, '[6.1,7.4,5.6]'),
('Tim',2017,'[6.3,5.6,8.3]');
2017年共有3名学生参加了3次考试。我想计算 2017 年所有学生考试的平均值(精度为 n)。
自己亲自尝试过,到现在只实现了以下几点: http://www.sqlfiddle.com/#!15/58f38/44
所以我想得到如下结果:
student| year | averages
-------+-------+-----------
All | 2017 | [6.567, 7.033, 7.700]
最佳答案
您可以使用unnest
,进行计算并聚合回 JSON 格式:
WITH cte AS (
SELECT 'All' AS student, year, AVG(unnest::decimal(10,2)) AS av
FROM marks,
unnest(ARRAY(SELECT json_array_elements_text(testresult))) with ordinality
GROUP BY year, ordinality
)
SELECT student, year, array_to_json(array_agg(av::decimal(10,3))) AS averages
FROM cte
GROUP BY student, year;
输出:
+---------+------+---------------------+
| student | year | averages |
+---------+------+---------------------+
| All | 2017 | [6.567,7.033,7.700] |
+---------+------+---------------------+
关于sql - Postgres 中多个数组的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297481/