Re: a SQL query question

Поиск
Список
Период
Сортировка
Искать
От
brian
Тема
Re: a SQL query question
Дата
Msg-id
488E8D2B.4070100@zijn-digital.com
Ответ на
a SQL query question (Rajarshi Guha)
Список
Дерево обсуждения
a SQL query question Rajarshi Guha <rguha@indiana.edu>
Re: a SQL query question "Adam Rich" <adam.r@sbcglobal.net>
Re: a SQL query question Klint Gore <kgore4@une.edu.au>
Re: a SQL query question brian <brian@zijn-digital.com>
Re: a SQL query question Rajarshi Guha <rguha@indiana.edu>
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
В списке pgsql-general по дате отправления
От: Klint Gore
Дата:
Сообщение: Re: a SQL query question
От: Yi Zhao
Дата:
Сообщение: Re: why can't I load pgxml.sql
FAQ