PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

les appels de fonction d'agrégation postgres peuvent ne pas être imbriqués

Je supposerai que vous devez d'abord calculer la formule interne pour certains groupes d'éléments, puis additionner les résultats. J'utilise product colonne comme choix arbitraire pour grouper la colonne. J'ai aussi renommé Count à dcount .

SQLFiddle

Exemple de données :

create table sample (
  product varchar,
  dcount int,
  impressions int,
  volume int
);

insert into sample values ('a', 100, 10, 50);
insert into sample values ('a', 100, 20, 40);
insert into sample values ('b', 100, 30, 30);
insert into sample values ('b', 100, 40, 30);
insert into sample values ('c', 100, 50, 10);
insert into sample values ('c', 100, 60, 100);

Requête :

select
  sum(frequency) as frequency
from 
  (
  select
    product,
    sum((impressions / dcount::numeric) * volume) / sum(volume) as frequency
  from 
    sample
  group by
    product
  ) x;

Le fait est que vous ne pouvez pas imbriquer des fonctions d'agrégation. Si vous devez agréger des agrégats, vous devez utiliser une sous-requête.