Om du vill ha rangen, gör något liknande
SELECT id,num,rank FROM (
SELECT id,num,rank() OVER (ORDER BY num) FROM foo
) AS bar WHERE id=4
Eller om du verkligen vill ha radnumret, använd
SELECT id,num,row_number FROM (
SELECT id,num,row_number() OVER (ORDER BY num) FROM foo
) AS bar WHERE id=4
De kommer att skilja sig när du har lika värden någonstans. Det finns också dense_rank() om du behöver det.
Detta kräver naturligtvis PostgreSQL 8.4.