繁体   English   中英

在 PostgreSQL v14.x 中使用 json_build_object 和 SELECT 语句的结果

Using json_build_object in PostgreSQL v14.x with the result of a SELECT statement

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试根据 SELECT 语句的结果在 PostgreSQL v14.x 中创建具有不同数量键/值对的 JSON 对象的VIEW 使用json_agg返回一个对象数组 - 每个评分可能性的键,以及一个值,该值是从评论表中选择的所有评分的计数。 我需要一个具有多个键/值对的对象,而不是数组,其中的值对应于 ratings 列的聚合count() ),按 product_id 分组。 尝试重用json_build_object没有按预期工作。

使用:

CREATE VIEW reviews.meta AS
SELECT product_id, json_agg(json_build_object(reviews.list.rating, reviews.list.rating))
FROM reviews.list
GROUP BY reviews.list.product_id
ORDER BY product_id;

返回:

product_id | reviews_count
---------------------------
         1 | [{"5" : 5}, {"4" : 4}]
         2 | [{"4" : 4}, {"4" : 4}, {"3" : 3}, {"5" : 5}, {"2" : 2}]

但我正在寻找:

product_id | reviews_count
---------------------------
         1 | {"5" : 1, "4" : 1}
         2 | {"4" : 2, "3" : 1, "5" : 1, "2" : 1}

动态创建的对象:

  • 按 product_id 在行中
  • 其中值是出现在 review.list 表中的整数评级 (1-5) 的数量
  • 在一个对象而不是一个对象数组中

SQL / PL / pgSQL 语言的新手,任何提示将不胜感激!

感恩节快乐:)

1 个回复

您需要两层聚合,一层用于获取计数,另一层用于打包计数。 通过将一个查询嵌套在另一个查询的 FROM 中很容易做到这一点:

CREATE or replace VIEW meta AS
SELECT product_id, jsonb_object_agg(rating, count)
FROM (select product_id, rating, count(*) from list group by product_id, rating) foo
GROUP BY product_id
ORDER BY product_id;
2 在Postgres中返回json_build_object处理在delete语句中找不到记录

我在使用postgres函数时遇到麻烦,在该函数中删除行并返回不存在该行的json_build_object。 这是代码: 当找到要删除的行时,这种方法很好用,但是当找不到行时,它最终返回1行而不是预期的0行。 我简化了json_build_object字段,因为实际上我在其 ...

6 在sqlite中使用select语句

如果GENERIC_ID_KEY和customerDbId是字符串,我应该如何修改此命令。 我尝试在黑白中使用like,但结果仍然是负面的,抛出n错误。 ...

9 如何在if语句中使用if语句编写select语句

我想在postgres中写一个选择语句,如果条件在哪里,我该如何放置 假设要创建报告,我们的表中有20个国家/地区,并且我们有三种类型的雇员,他们具有contact, payroll and permanent雇员,这就是employee_category。我想获取除India和USA以外的所有雇员 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM