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
                          [EMAIL PROTECTED]



---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Reply via email to