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...
I forgot about row subqueries; for n=3, for example:
=> SELECT * FROM t1 WHERE (nam,co,num) IN (SELECT nam,co,num FROM t1 b where b.nam=t1.nam order by num desc limit 3) order by nam, num desc;
nam | co | num -----+--------+------ abe | ibm | 1500 abe | cisco | 800 joe | cisco | 1200 joe | ibm | 600 joe | novell | 500 (5 rows)
Seems to work... Thanks all, Rich Cullingford [EMAIL PROTECTED]
---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]