You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中计算JSONB数组内分数平均值的查询方法

PostgreSQL JSONB数组分数平均值查询方案

核心查询语句

SELECT
  gameid,
  AVG((score_item ->> 'score')::numeric) AS averagescore
FROM
  games,
  jsonb_array_elements(gameinfo -> 'scores') AS score_item
GROUP BY
  gameid
ORDER BY
  gameid;

语句说明

  • jsonb_array_elements(gameinfo -> 'scores'):将gameinfo字段里的scores JSONB数组拆分成单行记录,每个数组元素对应一行,别名为score_item。
  • score_item ->> 'score':提取每个评分项中的score值(返回文本类型),再通过::numeric转换为数值类型,确保能参与平均值计算。
  • AVG(...):对每个游戏的所有评分计算平均值。
  • GROUP BY gameid:按游戏ID分组,保证每个游戏仅返回一条平均结果。
  • ORDER BY gameid:按游戏ID排序,与期望输出结构一致。

兼容空数组的版本

如果存在scores数组为空的游戏,可使用左连接确保这类游戏也出现在结果中,并用COALESCE将空平均值替换为0:

SELECT
  g.gameid,
  COALESCE(AVG((score_item ->> 'score')::numeric), 0) AS averagescore
FROM
  games g
LEFT JOIN
  jsonb_array_elements(g.gameinfo -> 'scores') AS score_item ON true
GROUP BY
  g.gameid
ORDER BY
  g.gameid;

内容的提问来源于stack exchange,提问作者tomzinho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:30:51