Jeśli chcesz uzyskać rangę, zrób coś takiego
SELECT id,num,rank FROM (
SELECT id,num,rank() OVER (ORDER BY num) FROM foo
) AS bar WHERE id=4
Lub jeśli rzeczywiście chcesz podać numer wiersza, użyj
SELECT id,num,row_number FROM (
SELECT id,num,row_number() OVER (ORDER BY num) FROM foo
) AS bar WHERE id=4
Będą się różnić, gdy masz gdzieś równe wartości. W razie potrzeby dostępna jest również wartość gęsta_rank().
Wymaga to oczywiście PostgreSQL 8.4.