From: | Richard Huxton <dev(at)archonet(dot)com> |
---|---|
To: | "John D(dot) Burger" <john(at)mitre(dot)org> |
Cc: | PostgreSQL General <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Aggregates |
Date: | 2007-06-21 15:00:41 |
Message-ID: | 467A9299.7040203@archonet.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
John D. Burger wrote:
>
> On Jun 21, 2007, at 09:22, Richard Huxton wrote:
>
>> Naz Gassiep wrote:
>>> Hi,
>>> If I have a table with users and a table with messages, is it
>>> possible to have a query that returns user.* as well as one extra column
>>> with the number of messages they have posted and the data and time of
>>> the last message? At the moment I am using a subquery to do this,
>>> however it seems suboptimal. Is there a better way?
>>
>> Not really. You have three separate queries really:
>> 1. User details
>> 2. Total number of messages posted
>> 3. Details on last message posted
>>
>> Unless you have a messaging-summary table that you keep up-to-date
>> with triggers you're looking at a three-part query.
>
> Certainly except for the user details it could be a single GROUP BY with
> several aggregate functions, something like:
>
> select user.userid, count(*), max(message.datetime)
> from user join message using (userid)
> group by user.userid;
Ah, but this just includes the time of the last message, not its data.
--
Richard Huxton
Archonet Ltd
From | Date | Subject | |
---|---|---|---|
Next Message | Csaba Nagy | 2007-06-21 15:01:19 | Re: Excell |
Previous Message | Scott Marlowe | 2007-06-21 14:45:57 | Re: Excell |