Rajarshi Guha wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi, I have a table of the form

aid  pid  nmol
- ---  ---  ----
1    23   34
2    45   3445
3    23   100
4    78   12
5    45   14
6    45   200
7    null null

In general, aid is unique, pid and nmol are non-unique.

What I'm trying to do is to select those rows where pid is not null, grouped by pid. So I'd get the following

aid  pid  nmol
- ---  ---  ----
1    23   34
3    23   100
2    45   3445
5    45   14
6    45   200
4    78   12
>
From within each group I'd like to select the row that has the maximum value of nmol. So I'd end up with

aid  pid  nmol
- ---  ---  ----
3    23   100
2    45   3445
4    78   12

I can easily do the first step, but am struggling to make the SQL for the second step. Any pointers would be appreciated


This should do it:

SELECT DISTINCT ON (pid) aid, pid, nmol
FROM foobar
WHERE pid IS NOT NULL
ORDER BY pid ASC, nmol DESC;

The pid ASC satisfies the requirement for the DISTINCT ON part, while the nmol DESC ensures we get the MAX from each group. Or something like that.

brian

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to