0

J'ai 4 tablesComment utiliser la jointure avec la fonction d'agrégat dans postgresql?

Table1

id | name  
1  | A 
2  | B 

Tableau 2

id | name1  
1  | C 
2  | D 

Table3

id | name2  
1  | E 
2  | F 

Table4

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 

Maintenant, je veux rejoindre toutes les tables avec 4 et obtenir ce type de sortie

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

J'ai essayé

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 

Je suis en train de réaliser cet . Tout le monde peut m'aider.

+0

s'il vous plaît baliser le système de base de données appropriée. – Squirrel

+0

okay J'ai édité ma question –

+0

J'ai essayé ceci ... select array_agg (distinct (rt.name)), array_agg (distinct (temp.test)) de (sélectionner f.resource_type_id, (comptage (f.resource_type_id)) "test" de planner.resource_entity f rejoindre planner.resource_type ft sur f.resource_type_id = groupe ft.id par f.resource_type_id) Temp rejoindre planner.resource_type rt on temp.resource_type_id = rt.id –

Répondre

2

Calculer les comptes pour chaque table séparément et de l'union des résultats:

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

Si j'ai utilisé la colonne, le type de données est array dans la table 4 alors. –