Sql 按并集结果分组
我有两张桌子:“家长”和“孩子” 儿童:Sql 按并集结果分组,sql,postgresql,Sql,Postgresql,我有两张桌子:“家长”和“孩子” 儿童: ID | NAME | PARENT_ID -------------------------------- 1 | Child 1 | 1 2 | Child 2 | 1 3 | Child 3 | 1 4 | Child 4 | 1 5 | Child 5 | 1 6 | Child 6 | 2 7 |
ID | NAME | PARENT_ID
--------------------------------
1 | Child 1 | 1
2 | Child 2 | 1
3 | Child 3 | 1
4 | Child 4 | 1
5 | Child 5 | 1
6 | Child 6 | 2
7 | Child 7 | 2
8 | Child 8 | 2
9 | Child 9 | 2
10 | Child 10 | 2
11 | Child 11 | 2
12 | Child 12 | 2
13 | Child 13 | 2
14 | Child 14 | 2
15 | Child 15 | 3
16 | Child 16 | 3
17 | Child 17 | 3
家长:
ID | NAME | UNIQUE_ID
----------------------------------
1 | PARENT 1 | uniq-001
2 | PARENT 2 | uniq-002
3 | PARENT 3 | uniq-003
我想合并这两个表,得到这样的结果
ID | NAME | PARENT_ID
---------------------------------
1 | parent 1 | 1
1 | child 1 | 1
2 | child 2 | 1
2 | parent 2 | 2
6 | child 6 | 2
7 | child 7 | 2
12 | child 12 | 2
13 | child 13 | 2
14 | child 14 | 2
3 | parent 3 | 3
15 | child 15 | 3
我的sql代码看起来像
select * from
(
SELECT
id,
name,
id as parent_id
from
parent
UNION all
SELECT
id,
name,
parent_id
from
child
) t
group by 3, 1, 2
我不知道为什么,但结果没有按父ID分组。
我如何按家长ID将此查询分组?恐怕问题还不够清楚。 这里有两条关于启动的建议 都都
如果显式指定列,是否有效?(
group by parent_id,id,name
)你只需要一个订单吗
select id
,name
,unique_id
from ( select 2,id,parent_id,name,null from child
union all select 1,id,id ,name,unique_id from parent
) t (source_order,id,pid,name,unique_id)
order by pid
,source_order
,id
;
id name unique_id
-- ---- ---------
1 PARENT 1 uniq-001
1 Child 1
2 Child 2
3 Child 3
4 Child 4
5 Child 5
2 PARENT 2 uniq-002
6 Child 6
7 Child 7
8 Child 8
9 Child 9
10 Child 10
11 Child 11
12 Child 12
13 Child 13
14 Child 14
3 PARENT 3 uniq-003
15 Child 15
16 Child 16
17 Child 17
select p.*
,(select array_agg ('(' || c.id || ') ' || c.name order by c.id) from child as c where c.parent_id = p.id) as children
from parent as p
order by p.id
;
id name unique_id childrn
-- ---- --------- -------
1 PARENT 1 uniq-001 (1) Child 1 ,(2) Child 2 ,(3) Child 3 ,(4) Child 4 ,(5) Child 5
2 PARENT 2 uniq-002 (6) Child 6 ,(7) Child 7 ,(8) Child 8 ,(9) Child 9 ,(10) Child 10,(11) Child 11,(12) Child 12,(13) Child 13,(14) Child 14
3 PARENT 3 uniq-003 (15) Child 15,(16) Child 16,(17) Child 17