Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres按数组列分组_Postgresql_Group By_Array Agg - Fatal编程技术网

Postgresql Postgres按数组列分组

Postgresql Postgres按数组列分组,postgresql,group-by,array-agg,Postgresql,Group By,Array Agg,我有一份学生和家长的名单,我想用学生证把他们分成几个家庭。共享普通学生id的家长可以被视为一个家庭,而共享普通家长id的学生也可以被视为一个家庭。这是一个示例表: p_id | parent_name | s_id | student_name | ------------------------------------------| 1 | John Doe | 100 | Mike Doe | 3 | Jane Doe | 100 | Mike Do

我有一份学生和家长的名单,我想用学生证把他们分成几个家庭。共享普通学生id的家长可以被视为一个家庭,而共享普通家长id的学生也可以被视为一个家庭。这是一个示例表:

 p_id | parent_name | s_id | student_name |
------------------------------------------|
 1    | John Doe    | 100 |  Mike Doe     |
 3    | Jane Doe    | 100 |  Mike Doe     |
 3    | Jane Doe    | 105 |  Lisa Doe     |
 5    | Will Willy  | 108 |  William Son  |
我想以这样的方式结束:

     parents       |       students         |
-------------------|------------------------|
John Doe, Jane Doe |  Mike Doe, Lisa Doe    |
Will Willy         |  William Son           |
为了实现这一点,我目前正在使用:

SELECT array_agg(parents) AS parents FROM (
    SELECT array_agg(p_id) AS par_ids, array_agg(parent_name) AS parents, student_name, s_id 
    FROM (
        /* sub query */
    )b
    GROUP BY s_id, student_name
    ORDER BY parents ASC
)c
GROUP BY unnest(par_ids)
ORDER BY parents ASC
但是我得到一个错误:
错误:无法累积不同维度的数组
<代码>SQL状态:2202E

我怎样才能达到预期的结果? 来自上述语句的内部查询返回:

| par_ids |       parents       |  student_name   | s_id |
--------------------------------|------------------------|
| {1,3}   | {John Doe, Jane Doe}|  Mike Doe       | 100  |
| {3}     | {Jane Doe}          |  Lisa Doe       | 105  |
| {5}     | {Will Willy}        |  William Son    | 108  |
现在,将这些学生归为家长是我的难题。

我已经做了类似的事情(但有点复杂):


  • p\u id
    值聚合到一个数组中:

    苏伊德 父母 108 {5} 105 {3} 100 {1,3} 我已经在这里做了类似的事情(但有点复杂):


  • p\u id
    值聚合到一个数组中:

    苏伊德 父母 108 {5} 105 {3} 100 {1,3}
    谢谢这真的帮了我大忙。我想不出办法,谢谢。这真的帮了我大忙。我想不出一个解决办法。
    SELECT
        array_agg(parent_name) as parents,                -- 4
        array_agg(student_name) as students
    FROM (
        SELECT DISTINCT ON (t.s_id)                       -- 3
            *
        FROM (
            SELECT
                s_id,
                array_agg(p_id) as parents                -- 1
            FROM mytable
            GROUP BY s_id
        ) s JOIN mytable t ON t.p_id = ANY(s.parents)     -- 2
        ORDER BY t.s_id, CARDINALITY(parents) DESC        -- 3
    ) s
    GROUP BY parents