0

我有4個表如何在postgresql中使用join和聚合函數?

表1

id | name  
1  | A 
2  | B 

表2

id | name1  
1  | C 
2  | D 

表3

id | name2  
1  | E 
2  | F 

表4

id | name1_id | name2_id | name3_id   
1  | 1   | 2   | 1 
2  | 2   | 2   | 2 
3  | 1   | 2   | 1 
4  | 2   | 1   | 1 
5  | 1   | 1   | 2 
6  | 2   | 2   | 1 
7  | 1   | 1   | 2 
8  | 2   | 1   | 1 
9  | 1   | 2   | 1 
10 | 2   | 2   | 1 

現在我想參加所有的表有4個,並得到此類型的輸出

name | count 
{A,B} | {5, 5} 
{C,D} | {5, 6} 
{E,F} | {7, 3} 

我想這

select array_agg(distinct(t1.name)), array_agg(distinct(temp.test)) 
from 
(select t4.name1_id, (count(t4.name1_id)) "test" 
    from table4 t4 group by t4.name1_id 
) temp 
join table1 t1 
on temp.name1_id = t1.id 

我試圖做到這一點。任何人都可以幫助我。

+0

請標記相應的數據庫系統。你不能同時使用所有不同的數據庫系統 – Squirrel

+0

好吧我編輯我的問題 –

+0

我試過這個... select array_agg(distinct(rt.name)),array_agg(distinct(temp.test)) from (select f.resource_type_id,(count(f.resource_type_id))「test」from planner.resource_entity f join planner.resource_type ft on f.resource_type_id = ft.id group by f.resource_type_id)temp join planner.resource_type rt 在temp.resource_type_id = rt.id –

回答

2

計算計數單獨的每個表和工會的結果:

select 
    array_agg(name order by name) as name, 
    array_agg(count order by name) as count 
from (
    select 1 as t, name, count(*) 
    from table4 
    join table1 t1 on t1.id = name1_id 
    group by name 
    union all 
    select 2 as t, name, count(*) 
    from table4 
    join table2 t2 on t2.id = name2_id 
    group by name 
    union all 
    select 3 as t, name, count(*) 
    from table4 
    join table3 t3 on t3.id = name3_id 
    group by name 
    ) s 
group by t; 

name | count 
-------+------- 
{A,B} | {5,5} 
{C,D} | {4,6} 
{E,F} | {7,3} 
(3 rows)  
+0

如果我使用列數據類型是表4中的數組然後。 –

相關問題