PostgreSQL查询计算jsonb数据类型列中值的出现次数

k3bvogb1  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(155)

我正在创建一个PostgreSQL查询,以解决以下情况:

  • 我有一个数据类型为jsonb的列。
  • 在此列中,有一个包含两个属性的数据对象:labels和number。例如:“data”:{“label”:“SOME_LABEL”,“number”:1}。
  • 目标是对所有具有相同“标签”的记录的“编号”属性求和。
  • 例如:
  • 记录1:列信息->“data”:{“label”:“SOME_LABEL_1”,“number”:1}
  • 记录2:列信息->“data”:{“label”:“SOME_LABEL_2”,“number”:1}
  • 记录3:列信息->“data”:{“label”:“SOME_LABEL_1”,“number”:80}
  • 记录4:列信息->“data”:{“label”:“SOME_LABEL_2”,“number”:10}
  • 记录5:列信息->“data”:{“label”:“SOME_LABEL_3”,“number”:1}
  • 求和后,结果需要按具有最高总“数”值的“标签”排序。
  • 所需的输出如下所示:
  • 第1行:标签:“SOME_LABEL_1”,总和:81
  • 第2行:标签:“SOME_LABEL_2”,总和:11
  • 第3行:标签:“SOME_LABEL_3”,总和:1

我将非常感谢您在这件事上提供的任何帮助。

42fyovps

42fyovps1#

您可以使用以下查询获得所需的结果:

SELECT data ->> 'label' AS label, SUM((data ->> 'number')::numeric) AS total_sum
FROM my_table
GROUP BY data ->> 'label'
ORDER BY total_sum DESC
LIMIT 1;

字符串
按“label”分组,取“number”的和,然后选择和最大的记录

相关问题