简体   繁体   English

postgres:汇总许多表

[英]postgres: aggregate many tables

ER图

Need to select from projects and get something like: 需要select from projects进行select from projects并获得如下信息:

[id] = int [id] = int

[staff] = agg{users.data, staff.data, role.data} [staff] = agg {users.data,staff.data,role.data}

[chief] = agg{users.data, staff.data, role.data} [chief] = agg {users.data,staff.data,role.data}

[client] = agg{users.data, clients.data, role.data} [客户端] = agg {users.data,clients.data,role.data}

[involved] = [agg{users.data, staff.data, role.data}] , [agg{users.data, staff.data, role.data}], ... [涉及] = [agg {users.data,staff.data,role.data}],[agg {users.data,staff.data,role.data}],...

[other_project_data] [other_project_data]

I know about array_agg(json_agg) , but it require only 1 argument. 我知道array_agg(json_agg) ,但它只需要1个参数。 And I get only [staff] = agg{user.data} 而且我只得到[staff] = agg {user.data}

you need to use json_build_object/jsonb_build_object (key, value): 您需要使用json_build_object / jsonb_build_object(键,值):

 jsonb_agg(
         jsonb_build_object(
                 'usersdata', users.data,
                 'staffdata', staff.data
          ))

UPD: answer to comment UPD:回答评论

Using two tables: 使用两个表:

WITH users AS (
     SELECT 1 as id, 'aaa'::text AS data, 10 as cnt
), staff AS (
     SELECT 1 as user_id, 'bbbb'::text AS data, 5 as cnt
) 
SELECT
     jsonb_agg(
         jsonb_build_object(
                 'usersdata', u.data || s.data,
                 'usersdataarray', ARRAY[ u.data, s.data],
                 'cntdata', u.cnt + s.cnt
          ))
FROM users AS u
JOIN staff AS s ON (s.user_id = u.id)

WITH clause emulate your tables. WITH子句模拟您的表。

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

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