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

PostgreSQL query to calculate occurrence of values in a jsonb data type column

提问人:0x55b1E06FF 提问时间:10/28/2023 更新时间:10/28/2023 访问量:35

问:

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

  • 我有一个数据类型为 jsonb 的列。
  • 在此列中,有一个包含两个属性的数据对象:labels 和 number。例如:“data”: {“label”: “SOME_LABEL”, “number”: 1}。
  • 目的是对具有相同“标签”的所有记录的“number”属性求和。
  • 例如:
    • 记录 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 行:label:“SOME_LABEL_3”,总和:1

我将非常感谢您就此事提供的任何帮助。

SQL 数据库 PostgreSQL 子查询

评论


答:

2赞 user699848 10/28/2023 #1

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

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;

按“标签”分组并获取“数字”的总和,然后选择具有最大总和的记录

评论

1赞 Stefanov.sm 10/28/2023
删除以获得所需的输出。limit 1