| From: | Rich Cullingford <rculling(at)sysd(dot)com> |
|---|---|
| To: | pgsql-performance(at)postgresql(dot)org |
| Subject: | Top n queries and GROUP BY |
| Date: | 2003-11-17 16:38:37 |
| Message-ID: | 3FB8F98D.1010707@sysd.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-performance |
All,
This is a straight SQL question, maybe not appropriate for a performance
list, but...
I have a simple stock holdings setup:
=> select * from t1;
nam | co | num
-----+-----------+------
joe | ibm | 600
abe | ibm | 1500
joe | cisco | 1200
abe | cisco | 800
joe | novell | 500
joe | microsoft | 200
What I would like to see is a Top-n-holdings-by-name", e.g, for n=2:
nam | co | num
----------+--------+-----
joe | cisco | 1200
joe | ibm | 600
abe | ibm | 1500
abe | cisco | 800
I can get part of the way by using a LIMIT clause in a subquery, e.g,
=> select 'abe', a.co, a.num from (select co, num from t1 where
nam='abe' order by num desc limit 2) as a;
?column? | co | num
----------+-------+------
abe | ibm | 1500
abe | cisco | 800
but I can't figure out a correlated subquery (or GROUP BY arrangement or
anything else) that will cycle through the names. I vaguely remember
that these kinds or queries are hard to do in standard SQL, but I was
hoping that PG, with its extensions...
Thanks, Rich Cullingford
rculling(at)sysd(dot)com
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Rich Cullingford | 2003-11-17 17:56:23 | Re: Top n queries and GROUP BY |
| Previous Message | Joel Jacobson | 2003-11-17 14:51:20 | Backup/restore of pg_statistics |