Re: Imbrication de fonction d'aggregat impossible

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: Christophe Garault <christophe(at)garault(dot)org>
Cc: Liste PostgreSQL Fr <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: Imbrication de fonction d'aggregat impossible
Date: 2007-01-13 09:52:13
Message-ID: 45A8ABCD.209@lelarge.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Christophe Garault a écrit :
> [...]
> select avg(count(*)) from logs where log_program like '%postfix%' and
> log_message like '%reject%' group by log_date;
> ERREUR: les appels a la fonction d'aggregat ne doivent pas etre imbriques
>
> Dois-je en passer obligatoirement par une table intermédiaire ou l'un
> d'entre vous aurait une autre solution à me proposer?
>

Passe plutôt par une requête imbriquée :
SELECT avg(total)
FROM (select count(*) as total from logs
where log_program like '%postfix%'
and log_message like '%reject%') AS tmp;

Je n'ai pas testé car je n'ai pas le temps actuellement, mais je
commencerais avec ça.

Pour plus d'infos, voir :
http://docs.postgresqlfr.org/8.2/queries-table-expressions.html#queries-subqueries

Sinon, tu peux aussi créer une vue à partir de ta première sélection :
CREATE VIEW logs_postfix_rejected (log_date, log_count)
AS
select log_date, count(*) from logs
where log_program like '%postfix%'
and log_message like '%reject%'
group by log_date;

Pour avoir la moyenne, c'est bien plus simple du coup :
SELECT avg(log_count) FROM logs_postfix_rejected

Là aussi, pas testé, faut que je file, je suis de plus en plus en retard...

Un dernier truc : je pense que ces deux méthodes sont équivalents au
niveau du serveur PostgreSQL car il ne s'agit pas d'une vue
matérialisée. Tu ne gagneras pas en perfs en utilisant l'une plutôt que
l'autre (enfin, c'est mon avis/impression comme ça, là, rapide). Par
contre, la vue est intéressante car tu peux la réutiliser pour d'autres
applications, ce qui t'évite de saisir des grosses requêtes
continuellement. En fait, actuellement, dans PostgreSQL, les vues ne
sont qu'un espace où on peut stocker nos requêtes favorites et/ou les
plus utilisées.

Voilà,

Bon courage :)

--
Guillaume.
<!-- http://abs.traduc.org/
http://lfs.traduc.org/
http://docs.postgresqlfr.org/ -->

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Christophe Garault 2007-01-13 14:52:42 Re: Imbrication de fonction d'aggregat impossible
Previous Message Christophe Garault 2007-01-13 09:14:31 Imbrication de fonction d'aggregat impossible