Thread: How to find out top 3 records in each location
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.
Thank you in advance.
On Mon, Nov 20, 2006 at 12:09:00PM -0500, wen tseng wrote: > > Since PostgreSQL doesn't support TOP, how can I do to get this result? > Any solution will be appreciated. Check out the crosstab stuff in contrib/; I think it does what you want. a -- Andrew Sullivan | ajs@crankycanuck.ca The whole tendency of modern prose is away from concreteness. --George Orwell
> 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,( selectsales from sales where location = A1.location order by sales desc limit 1 offset 1) as Top2,( select sales fromsales 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.
Oops, I made a mistake the sub-selects should be item not sales... > SELECT > A1.location, > ( select item ^^^^ > from sales > where location = A1.location > order by sales desc > limit 1 > ) as TOP1, > ( select item ^^^^ > from sales > where location = A1.location > order by sales desc > limit 1 offset 1 > ) as Top2, > ( select item ^^^^ > 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. > > ---------------------------(end of broadcast)--------------------------- > TIP 3: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faq >