Re: Picking the first of an order in an aggregate query

From: François Beausoleil <francois(at)teksol(dot)info>
To: Robert James <srobertjames(at)gmail(dot)com>
Cc: Jack Christensen <jack(at)jackchristensen(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: Picking the first of an order in an aggregate query
Date: 2012-12-31 21:03:01
Message-ID: 2D5187D5-8D0B-4E18-B129-89CF3DAA5A5F@teksol.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


Le 2012-12-31 à 15:38, Robert James a écrit :

> DISTINCT is a very simple solution!
> But I have one problem: In addition to the FIRST fields, I also do
> want some aggregate functions. More accurately, it would be:
>
> SELECT grouping_field, FIRST(field_a), FIRST(field_b), SUM(field_x),
> MAX(field_y)
> ...
>
> How should I do that? Should I do two queries with a join on the
> grouping field? Or is there a more direct way?

WINDOW functions can help you:

SELECT
grouping_field
, first_value(field_a) OVER (ORDER BY ...)
, first_value(field_b) OVER (ORDER BY ...)
, sum(field_x) OVER ()
, max(field_y) OVER ()
FROM ...

The empty OVER clauses will make the sum / max work over the full result set, and not a subset. I really recommend reading the window functions section on the site.

Bye!
François

NOTE: Please do not top-post. This list is bottom post.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2012-12-31 21:04:48 Re: Insert Assertion Failed in strcoll_l.c:112
Previous Message Robert James 2012-12-31 20:38:01 Re: Picking the first of an order in an aggregate query