提问人:0x55b1E06FF 提问时间:10/28/2023 更新时间:10/28/2023 访问量:35
用于计算 jsonb 数据类型列中值出现的 PostgreSQL 查询
PostgreSQL query to calculate occurrence of values in a jsonb data type column
问:
我正在努力创建一个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
我将非常感谢您就此事提供的任何帮助。
答:
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
评论