Re: How to find out top 3 records in each location

From: Richard Broersma Jr <rabroersma(at)yahoo(dot)com>
To: wen tseng <went(at)hteamericas(dot)com>, pgsql-sql(at)postgresql(dot)org
Subject: Re: How to find out top 3 records in each location
Date: 2006-11-20 17:49:19
Message-ID: 452822.24102.qm@web31801.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

> On PostgreSQL, I have a table like this:
>
> Item Location Sales
> A X 10
> B X 6
> C Y 3
> D Y 8
> E Y 15
> F Y 11
>
> I'd like to find out top 3 items in each location and put those 3 items as colum values like
> this:
>
> Location Top1 Top2 Top3
> X A B
> Y E F D
>
> Since PostgreSQL doesn't support TOP, how can I do to get this result?
> Any solution will be appreciated.

Here is what I came up with. However, I am sure there maybe a better answer.

SELECT
A1.location,
( select sales
from sales
where location = A1.location
order by sales desc
limit 1
) as TOP1,
( select sales
from sales
where location = A1.location
order by sales desc
limit 1 offset 1
) as Top2,
( select sales
from sales
where location = A1.location
order by sales desc
limit 1 offset 2
) as Top3

FROM
( SELECT location
from sales
group by location
) AS A1
;

Regards,

Richard Broersma Jr.

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Richard Broersma Jr 2006-11-20 17:57:41 Re: How to find out top 3 records in each location
Previous Message Andrew Sullivan 2006-11-20 17:48:22 Re: How to find out top 3 records in each location