2010-09-13 10 views
0

J'ai besoin de faire le même groupe sur un tas d'agrégats différents que j'obtiens avec des sous-requêtes imbriquées dans Postgresql 8.3.Agrégat imbriqué et sous-requête dans postgresql/SQL avec groupement

Si je fais ceci:

select f10 as report_id, 
     (SELECT AVG(age) 
      FROM (select f10 as report_id, 
         f62 as age 
        from reports 
       where f55 in ('1')) 
        and f62 in ('1', '2', '3', '4', '5'))) foo 
     group by report_id) as agg1, 
     (SELECT AVG(age) 
      FROM (select f10 as report_id, 
         f62 as age 
        from reports 
       where f55 in ('2')) 
        and f62 in ('1', '2', '3', '4', '5'))) foo 
     group by report_id) as agg2, 
    from reports 
group by report_id; 

il est presque ce que je veux, mais le groupe ne fait pas par anything- tous les agrégats sont les mêmes, il est un agrégat dans tous report_ids. Je veux un agrégat séparé par report_id.

Si j'essaie de regrouper les agrégats, je ne peux pas renvoyer plus de 2 champs ou lignes et cela ne fonctionne donc pas.

Il m'a été suggéré de faire

sum(case 
     when f55 in ('1') then f62 
     else 0 
    end)/sum(case 
       when f55 in ('1') then 1 
       else 0 
       end) 

... etc. pour chacun des agrégats mais je ne pense pas que ce soit un bon moyen d'y aller. Je n'arrive pas à trouver mieux.

Répondre